【问题标题】:JDBC Prepared Statement . setDate(....) doesn't save the time, just the date.. How can I save the time as well?JDBC 准备好的语句。 setDate(....) 不节省时间,只是日期.. 我怎样才能节省时间呢?
【发布时间】:2011-10-15 23:49:12
【问题描述】:

我有以下查询:

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() 中输入什么来获取时间?

【问题讨论】:

    标签: java jdbc prepared-statement


    【解决方案1】:

    在 SQLServerDatabase 端将列定义为 SMALLDATETIME,在 java 端使用

    Timestamp sqlDate = new Timestamp( System.currentTimeMillis() );
    preparedStmt.setTimestamp( ++startIndex, sqlDate );
    

    在 SQLServerDatabase 端,不要将列类型指定为 Timestamp,否则会出现以下异常。

    无法将显式值插入时间戳列。将 INSERT 与列列表一起使用以排除时间戳列,或将 DEFAULT 插入时间戳列

    【讨论】:

    • 我为该列使用了 Timestamp mysql 数据类型,它工作得很好,没有任何例外。
    【解决方案2】:

    您应该使用 TimestampsetTimestamp 方法,而不是 Date

    实际上你必须这样做:

    private static java.sql.Timestamp getCurrentTimeStamp() {
        java.util.Date today = new java.util.Date();
        return new java.sql.Timestamp(today.getTime());
    }
    

    ....

    preparedStatement.setTimestamp(4,getCurrentTimeStamp());
    

    【讨论】:

      【解决方案3】:

      Java 类型 java.sql.Date 将被规范化以仅表示 SQL DATE 而不是时间的瞬间。来自 API 文档:

      为了符合 SQL DATE 的定义,由 java.sql.Date 实例包装的毫秒值必须通过在特定时区中将小时、分钟、秒和毫秒设置为零来进行“规范化”。实例已关联。

      标准化解释了为什么您将00:00:00 视为时间。

      如果您想保留时间信息,请考虑使用可以表示日期和时间的Timestamp 类。

      显然,您还应该使用相应的 SQL 类型来定义您的表结构;如果要在数据库中存储时间戳,请使用数据库首选的 SQL 类型。虽然某些数据库及其 JDBC 驱动程序可能允许您将时间戳存储在 DATE 列中,但如果可用,建议使用等效的 SQL TIMESTAMP 类型。

      【讨论】:

        猜你喜欢
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 2014-04-18
        • 1970-01-01
        相关资源
        最近更新 更多