java - 将 oracle.sql.timestamptz 转换为 java.sql.Timestamp

标签 java sql oracle

我正在尝试将 (Oracle) 数据库的系统时间戳转换为 java.sql.Timestamp

(部分)我用于测试该过程的代码是:

try {
    conn = this.getConnection();
    Statement stmt = conn.createStatement();

    stmt.execute("SELECT SYSTIMESTAMP FROM DUAL");

    ResultSet rs = stmt.getResultSet();
    ResultSetMetaData rsm = rs.getMetaData();

    while(rs.next()) {
        TIMESTAMPTZ ts = (TIMESTAMPTZ) rs.getObject(1);
        System.out.println(ts);
        System.out.println(ts.getClass());
        System.out.println(ts.timestampValue());
    }
} catch (SQLException e) {
    e.printStackTrace();
    System.out.println(e);
}

我得到的输出是:

oracle.sql.TIMESTAMPTZ@1e97f9f
class oracle.sql.TIMESTAMPTZ

and then an exception:
java.sql.SQLException: Conversion to Timestamp failed
at oracle.sql.Datum.timestampValue(Datum.java:283)
at com.sumawest.test.model.UnitTest.testTimezone(UnitTest.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at oracle.jdevimpl.junit.runner.TestRunner.doRun(TestRunner.java:111)
at oracle.jdevimpl.junit.runner.TestRunner.start(TestRunner.java:91)
at oracle.jdevimpl.junit.runner.TestRunner.main(TestRunner.java:43)
java.sql.SQLException: Conversion to Timestamp failed

有人知道我该如何解决这个问题吗?

最佳答案

如果反编译代码,您可以看到您正在调用父类 DatumtimestampValue 方法。

这直接抛出异常(方法中没有其他代码)。您需要调用 TIMESTAMPTZ 本身的 timestampValue 方法传递一个 Connection

关于java - 将 oracle.sql.timestamptz 转换为 java.sql.Timestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339058/

相关文章:

java - 空栈异常

java - 如何使用 <Integer,HashMap<Integer,Integer> 的 HashMap 添加增量值

java - 为什么人们会选择在接口(interface)中使用静态方法而不是默认方法

Python - 批量选择然后从一个数据库插入到另一个数据库

sql - 为什么 SQL Server 在某些环境中填充现有行中的新字段,而在其他环境中则不然?

java - RSA 加密中的 BadPaddingException

sql - VARCHAR 转十进制

sql - 如何抽象出子查询?

java - JDBC 根据另一个 select 语句的结果执行 select 语句

sql - 如何从 SQL 表中选择其中 TIMESTAMP 是特定日期