package jef.database.dialect.type; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import jef.database.dialect.DatabaseDialect; import jef.database.jdbc.result.IResultSet; /** * BIGINT <-> java.util.Date * 这个映射关系用来表示在Java内是日期时间型,在数据库中用NUMBER型,记录自1970年以来的毫秒数 * @author jiyi * */ public class NumBigDateMapping extends AbstractTimeMapping{ public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect session) throws SQLException { if(value==null){ st.setNull(index, java.sql.Types.BIGINT); return null; }else{ long time=((Date)value).getTime(); st.setLong(index, time); return time; } } public int getSqlType() { return java.sql.Types.BIGINT; } public Object jdbcGet(IResultSet rs, int n) throws SQLException { Object o=rs.getObject(n); if(o==null)return null; long l=((Number)o).longValue(); return new Date(l); } @Override protected String getSqlExpression(Object value, DatabaseDialect profile) { Date date=(Date)value; return String.valueOf(date.getTime()); } @Override protected Class<?> getDefaultJavaType() { return Date.class; } @Override public String getFunctionString(DatabaseDialect profile) { //将current_timestamp转换为毫秒数的数据库函数比较烦,暂不支持。 throw new UnsupportedOperationException("When using [Database:Number] <-> [java,util.Date] mapping, supports 'create-sys' and 'modified-sys' generator only."); } @Override public Object getCurrentValue() { return new Date(); } @Override public void jdbcUpdate(ResultSet rs, String columnIndex, Object value, DatabaseDialect dialect) throws SQLException { long time=((Date)value).getTime(); rs.updateLong(columnIndex, time); } }