package jef.database.dialect.type;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jef.accelerator.bean.AbstractFastProperty;
import jef.database.Field;
import jef.database.dialect.ColumnType;
import jef.database.dialect.DatabaseDialect;
import jef.database.jdbc.result.IResultSet;
import jef.database.meta.ITableMetadata;
import jef.tools.StringUtils;
import jef.tools.reflect.Property;
/**
* 数据库中是自增数值,而java中使用String来映射的情况
* @author jiyi
*
*/
public final class AutoStringMapping extends AutoIncrementMapping {
@Override
public void init(Field field, String columnName, ColumnType type, ITableMetadata meta) {
super.init(field, columnName, type, meta);
accessor = new J2SProperty(fieldAccessor);
}
public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect session) throws SQLException {
if (value == null) {
st.setNull(index, getSqlType());
} else {
Number n = Long.parseLong((String) value);
st.setLong(index, n.longValue());
}
return value;
}
@Override
public void jdbcUpdate(ResultSet rs,String column, Object value, DatabaseDialect dialect) throws SQLException {
Number n = Long.parseLong((String) value);
rs.updateLong(column, n.longValue());
}
public Object jdbcGet(IResultSet rs, int n) throws SQLException {
Object obj = rs.getObject(n);
if (obj == null)
return null;
return String.valueOf(obj);
}
@Override
protected String getSqlExpression(Object value, DatabaseDialect profile) {
return value.toString();
}
private static class J2SProperty extends AbstractFastProperty {
private Property sProperty;
J2SProperty(Property p) {
this.sProperty = p;
}
public String getName() {
return sProperty.getName();
}
public Object get(Object obj) {
String s = (String) sProperty.get(obj);
if (StringUtils.isEmpty(s))
return null;
return StringUtils.toLong(s, 0L);
}
public void set(Object obj, Object value) {
if (value != null) {
value = String.valueOf(value);
}
sProperty.set(obj, value);
}
}
@Override
protected Class<?> getDefaultJavaType() {
return String.class;
}
}