Java 如何通过jdbc在PostgreSQL中使用Before Christ date编写时间戳?
我尝试用PostgreSQL中的Java 如何通过jdbc在PostgreSQL中使用Before Christ date编写时间戳?,java,postgresql,jdbc,timestamp,Java,Postgresql,Jdbc,Timestamp,我尝试用PostgreSQL中的PreparedStatement编写基督诞生前的日期,但失败了。 有什么诀窍可以做到这一点吗 Postgres中的字段是不带时区的时间戳 当我试图通过语句将其作为字符串写入时,比如SQL插入public.tstest1(ts1)值(“'2014-01-11 14:00:08.354 BC'”)-它可以工作。 但是我不能用commonResultSet正确地检索它-它丢失了“BC”部分,并且错误地显示了日期或年份-在任何情况下-它在Anno Domini AD中工
PreparedStatement
编写基督诞生前的日期,但失败了。
有什么诀窍可以做到这一点吗
Postgres中的字段是不带时区的时间戳
当我试图通过语句将其作为字符串写入时,比如SQL插入public.tstest1(ts1)值(“'2014-01-11 14:00:08.354 BC'”)
-它可以工作。
但是我不能用commonResultSet
正确地检索它-它丢失了“BC”部分,并且错误地显示了日期或年份-在任何情况下-它在Anno Domini AD中工作
我用SimpleDateFormat
检查,在准备java.sql.Timestamp
和2014年BC一样的新时间戳(-2014-1900+1,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();
您尚未向我们展示如何检索和显示ts1
字段。我试过你的例子,效果很好。我使用getString()
检索ts1
字段,它显示如下值
"2014-03-04 05:06:07 BC"
当我使用getTimestamp()
检索它时,我检索的值与我插入的值相同,并且使用您的SimpleDataFormat
将其显示为:
2014/03/04 05:06 CET p.n.e.
其中p.n.e.
表示波兰语中的BC(我的地区)
我使用PostgreSQL 9.3和PostgreSQL-9.3-1100.jdbc41.jar
谢谢你的回答,兄弟。解决方案是使用最新版本的9.x jdbc驱动程序。我在pg74上遇到了老版本的问题。