Java JDBC准备了一份声明。设置日期(..)不';I don’我不能节省时间,只能节省日期。。我怎样才能节省时间呢?
我有以下疑问:Java JDBC准备了一份声明。设置日期(..)不';I don’我不能节省时间,只能节省日期。。我怎样才能节省时间呢?,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,我有以下疑问: INSERT INTO users (user_id, date_created) VALUES (?,?) 我准备了以下声明 PreparedStatement insertUser = dbConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); insertUser.setInt(1, 7); java.util.Date now = new java.util.Date(System.curr
INSERT INTO users (user_id, date_created) VALUES (?,?)
我准备了以下声明
PreparedStatement insertUser = dbConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
insertUser.setInt(1, 7);
java.util.Date now = new java.util.Date(System.currentTimeMillis());
insertUser.setDate(2, new java.sql.Date((new Date(System.currentTimeMillis())).getTime()));
insertUser.executeUpdate();
如果我检查数据库,我发现它只插入了今天的日期,而不是时间,所以应该是:2011-07-29 00:00:00
我应该在
setDate()
中输入什么来获取时间?而不是Date您应该使用和setTimestamp方法
实际上,你必须这样做:
private static java.sql.Timestamp getCurrentTimeStamp() {
java.util.Date today = new java.util.Date();
return new java.sql.Timestamp(today.getTime());
}
Java类型
Java.sql.Date
将被规范化,以仅表示sql日期,而不是时间的瞬间。从API文档中:
为了符合SQL日期的定义,必须通过将实例关联的特定时区中的小时、分钟、秒和毫秒设置为零来“规范化”java.SQL.DATE实例包装的毫秒值
规范化解释了为什么将00:00:00
视为时间
如果要保留时间信息,请考虑使用可以同时表示日期和时间的类。
显然,您还应该使用相应的SQL类型来定义表结构;如果要在数据库中存储时间戳,请使用数据库首选的SQL类型。虽然某些数据库及其JDBC驱动程序可能允许您在DATE
列中存储时间戳,但建议使用与SQL TIMESTAMP
类型等效的时间戳(如果可用)。在SQLServerDatabase端将列定义为SMALLDATETIME,在java端使用
Timestamp sqlDate = new Timestamp( System.currentTimeMillis() );
preparedStmt.setTimestamp( ++startIndex, sqlDate );
在SQLServerDatabase端,不要将列类型指定为时间戳,否则会出现以下异常
无法在时间戳列中插入显式值。在列列表中使用INSERT可以排除timestamp列,或者在timestamp列中插入默认值我为该列使用了timestamp mysql数据类型,它工作正常,没有异常。
Timestamp sqlDate = new Timestamp( System.currentTimeMillis() );
preparedStmt.setTimestamp( ++startIndex, sqlDate );