Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC准备了一份声明。设置日期(..)不';I don’我不能节省时间,只能节省日期。。我怎样才能节省时间呢?_Java_Jdbc_Prepared Statement - Fatal编程技术网

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 );