package jef.database.dialect.type;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jef.database.dialect.DatabaseDialect;
import jef.database.jdbc.result.IResultSet;
/**
* Java类中的ENUM对应数据库中的INT
* 按照枚举在类中定义的顺序,第一个枚举值为0.以此类推
*
* INT <-> enum. ordinal()
*
* @author jiyi
*
*/
public class NumIntEnumMapping extends AColumnMapping{
public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect session) throws SQLException {
if(value==null){
st.setNull(index, java.sql.Types.INTEGER);
}else{
st.setInt(index, ((Enum<?>)value).ordinal());
}
return value;
}
public int getSqlType() {
return java.sql.Types.INTEGER;
}
@Override
protected String getSqlExpression(Object value, DatabaseDialect profile) {
return String.valueOf(((Enum<?>)value).ordinal());
}
public Object jdbcGet(IResultSet rs, int n) throws SQLException {
Object obj=rs.getObject(n);
if(obj==null)return null;
Enum<?>[] enums=clz.asSubclass(Enum.class).getEnumConstants();
return enums[rs.getInt(n)];
}
@Override
protected Class<?> getDefaultJavaType() {
return Enum.class;
}
@Override
public void jdbcUpdate(ResultSet rs, String columnIndex, Object value, DatabaseDialect dialect) throws SQLException {
rs.updateInt(columnIndex, ((Enum<?>)value).ordinal());
}
}