2011-12-01 124 views
3

我想要的(Oracle)的數據庫SYSTIMESTAMP轉換成的java.sql.Timestamp轉換oracle.sql.timestamptz到的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); 
} 

我得到的輸出是:

[email protected] 
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 

有沒有人有一個想法,我怎麼能解決這個問題?

回答

0

您可以使用to_char函數將其轉換爲字符串,然後使用該值。

select to_char(systimestamp, 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual; 
+1

此答案如何幫助轉換爲'java.sql.Timestamp'? –

3

如果反編譯的代碼,你可以看到你調用父類DatumtimestampValue方法。

這直接拋出異常(方法中沒有其他代碼)。您需要撥打TIMESTAMPTZ本身的方法timestampValue傳遞Connection

相關問題