【问题标题】:How to use CURRENT_TIMESTAMP in JDBC (Oracle DB)如何在 JDBC (Oracle DB) 中使用 CURRENT_TIMESTAMP
【发布时间】:2015-03-05 04:59:42
【问题描述】:

在 MY_TABLE 中,当 ORD_AMT 字段更新时,LST_UPDT_TS 也会用 current_timestamp 更新。由以下查询提出:

UPDATE MY_TABLE
SET ORD_AMT = 50, LST_UPDT_TS = CURRENT_TIMESTAMP
WHERE ORD_ID = 'ORD_123'

我需要通过 JDBC 代码来实现这个业务,而且我的 Web 服务器和 DB 服务器是不同的时区。如果我将 Date().getTime() 传递给 JDBC,它是 Web 服务器的当前时间,但我需要 DB 服务器的当前时间。

有没有办法像这样传递 CURRENT_TIMESTAMP:

preparedStatement = dbConnection.prepareStatement(updateOrderSql);
preparedStatement.setFloat(1, 50);
preparedStatement.setTimestamp(2, Timestamp.CURRENT_TIMESTAMP);
preparedStatement.setString(3, 'ORD_123');
preparedStatement.executeUpdate();

感谢您的帮助。

【问题讨论】:

  • 您不能将CURRENT_TIMESTAMP 作为参数传递。只需将关键字保留在您的 SQL 中,不要将其替换为 ?

标签: oracle jdbc timestamp


【解决方案1】:

要使用 JDBC 更新 LST_UPDT_TS 字段,请使用以下代码:

preparedStatement.setTimestamp(2, new Timestamp(System.currentTimeMillis()));

您会在 DB 中看到更新的 LST_UPDT_TS 字段。

【讨论】:

    【解决方案2】:

    您可以使用SYSTIMESTAMP,而不是将当前时间戳参数传递给oracle,如下所示

    UPDATE MY_TABLE
    SET ORD_AMT = 50, LST_UPDT_TS = SYSTIMESTAMP
    WHERE ORD_ID = 'ORD_123'
    

    如果 FRONT END 服务器和 DB 服务器在同一台机器上,最终两者可能相同,我的意思是单层架构。如果不是,您可以将其类型转换为字符串并将其存储在具有 varchar2 数据类型的表中。

    【讨论】:

    • 我几乎从不建议将日期/时间戳存储为 varchar,您可以通过调用相应的函数以通过 dbms 进行转换,将其作为字符串传递,即LST_UPT_TS = to_date( :dateAsString, 'DD.MM.YYYY')
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2016-05-03
    • 2021-12-02
    • 1970-01-01
    • 2021-12-12
    • 2015-11-23
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多