我试图用PreparedStatement
在PostgreSQL中写下基督之前的日期而失败了。
这有什么窍门吗?
Postgres的场地是没有时区的TIMESTAMP。
当我尝试通过像Statement
这样的insert into public.tstest1(ts1) values('"2014-01-11 14:00:08.354 BC"')
将其写为字符串时 - 它可以正常工作。
但是我不能用普通的ResultSet
正确地检索它 - 它失去了“BC”部分并错误地显示了几天或一年 - 无论如何 - 它在Anno Domini AD中有效。
我使用SimpleDateFormat
检查了我在2014年BC java.sql.Timestamp
准备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();
答案 0 :(得分:1)
您没有向我们展示如何检索和显示ts1
字段。我试过你的例子,效果很好。我使用ts1
检索getString()
字段,并显示
"2014-03-04 05:06:07 BC"
当我使用getTimestamp()
检索它时,我检索的值与我插入的值相同,并且与SimpleDateFormat
一起显示,它显示为:
2014/03/04 05:06 CET p.n.e.
p.n.e.
表示波兰语中的BC(我的语言环境)。
我使用PostgreSQL 9.3和postgresql-9.3-1100.jdbc41.jar