gpt4 book ai didi

postgresql - 如何在准备好的语句中传递带有 ' '(时间戳)的字符串?

转载 作者:行者123 更新时间:2023-11-29 11:26:51 24 4
gpt4 key购买 nike

我正在尝试执行以下查询

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

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

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

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

当我做...(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();

我在“$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();

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

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

但是使用 pgadmin 我检查了值并得到了

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

有什么建议吗?

最佳答案

考虑使用setTimestamp() 方法代替setString() 方法。检查this link为了了解如何使用PreparedStatement

编辑:正如我在评论中解释的那样,检查 API reference对于具有三个参数的 setTimestamp():

Sets the designated parameter to the given java.sql.Timestamp value, using the given Calendar object. The driver uses the Calendar object to construct an SQL TIMESTAMP value, which the driver then sends to the database. With a Calendar object, the driver can calculate the timestamp taking into account a custom timezone. If no Calendar object is specified, the driver uses the default timezone, which is that of the virtual machine running the application.

关于postgresql - 如何在准备好的语句中传递带有 ' '(时间戳)的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13693723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com