如何在预准备语句中传递带有''(timestamp)的字符串?

Mik*_*asi 5 postgresql syntax-error insert-update timestamp-with-timezone

我正在尝试执行以下查询

INSERT INTO hotspot(timestamp) VALUES 
(timestamp with time zone '2012-10-25 14:00:00 +05:00' at time zone 'EET');
Run Code Online (Sandbox Code Playgroud)

我想将时间戳作为变量传递.

我的时间戳列是带时区的时间戳类型.

你知道如何做到这一点吗?

当我做...(Java,Postgresql)

    String stm= "INSERT INTO hotspot(timestamp) VALUES(timestamp with time zone ? at time zone 'EET')";
    pst = con.prepareStatement(stm);
    pst.setString(1, "2012-08-24 14:00:00 +05:00");
    pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我在"$ 1"或附近收到语法错误

无论如何我能克服这个错误吗?先感谢您!!

更新:我尝试通过以下方式使用setTimestamp ...

Calendar c=Calendar.getInstance(TimeZone.getTimeZone("GMT+05:00"));
String stm= "INSERT INTO hotspot(timestamp) VALUES(?)";
pst = con.prepareStatement(stm);
pst.setTimestamp(1,Timestamp.valueOf("2012-01-05 14:00:00"), c );
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我想数据库中的正确值应该是(关于我的本地时区是EET(+02))

2012-01-05 11:00:00 +02

但使用pgadmin我检查值,我得到

2012-01-05 14:00:00 +02

有什么建议?

Fed*_*ina 6

考虑使用setTimestamp()方法而不是setString()方法.检查此链接以了解如何使用PreparedStatement.

编辑:正如我在评论中解释的那样,使用三个参数检查setTimestamp()的API参考:

使用给定的Calendar对象将指定参数设置为给定的java.sql.Timestamp值.驱动程序使用Calendar对象构造SQL TIMESTAMP值,然后驱动程序将该值发送到数据库.使用Calendar对象,驱动程序可以计算考虑自定义时区的时间戳.如果未指定Calendar对象,则驱动程序将使用默认时区,即运行应用程序的虚拟机的时区.