2014-01-19 51 views
1

我試圖在PostgreSQL中編寫日期之前的日期與PreparedStatement並失敗。 有沒有任何技巧可以做到這一點?如何在PostgreSQL中通過jdbc編寫Time之前的日期?

Postgres中的字段是TIMESTAMP,沒有時區。

當我試圖通過Statement(如SQL insert into public.tstest1(ts1) values('"2014-01-11 14:00:08.354 BC"'))將它寫成字符串時 - 它的工作原理。 但我無法正確檢索它與共同ResultSet - 它失去了「BC」的一部分,並不正確地顯示幾天或一年 - 在任何情況下 - 它在Anno多米尼AD工作。

我檢查了SimpleDateFormat,我在準備java.sql.Timestamp與2014年BC年如new Timestamp(-2014-1900+1, 01, 01, 01, 01, 01, 01)後得到BC日期輸出。

但寫入數據庫後無法達到同樣的效果。

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO public.tstest1(ts1) VALUES (?)");   

    Timestamp tsBC = new Timestamp(-2014-1900+1, 01, 01, 01, 01, 01, 01); 
    Date dt1 = new Date(tsBC.getTime()); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm z G"); 
    System.out.println(sdf.format(dt1)); 

    pstmt.setTimestamp(1, tsBC); 
    pstmt.execute(); 

    pstmt.clearParameters(); 

    pstmt.setDate(1, dt1); 
    pstmt.execute(); 

    pstmt.clearParameters(); 
    pstmt.setObject(1, dt1); 
    pstmt.execute(); 

    pstmt.clearParameters(); 
    pstmt.setObject(1, tsBC); 
    pstmt.execute(); 

    pstmt.close(); 
    conn.close(); 

回答

1

您沒有向我們展示如何檢索並顯示ts1字段。我試過你的例子,它運作良好。我檢索ts1getString(),當我與getTimestamp()我檢索相同的值獲取它,因爲我插入它顯示像

"2014-03-04 05:06:07 BC" 

值,並將其與SimpleDateFormat它dispalyed爲:

2014/03/04 05:06 CET p.n.e. 

在哪裏p.n.e.意思是波蘭語(我的語言環境)中的BC。

我使用PostgreSQL 9.3和postgresql-9.3-1100.jdbc41.jar

+0

感謝您的回答,兄弟。 –

+0

解決方案是轉移到最新版本的9.x jdbc驅動程序。我經歷了與舊版本pg74有關的問題。 –

相關問題