gpt4 book ai didi

java - 如何使用java准备语句在mysql的date_sub函数中添加单位

转载 作者:行者123 更新时间:2023-11-29 01:50:10 25 4
gpt4 key购买 nike

我正在尝试创建一个准备好的查询,其中日期的单位部分需要作为参数传递。下面是代码

PreparedStatement ps = conn.prepareStatement("select DATE_SUB(UTC_TIMESTAMP(),INTERVAL ? ?)");
ps.setInt(1,timeInterval);
ps.setString(2,unit);

注意:timeInterval 是一个int 变量,unit 是一个String 变量,可以是“DAY” “分钟”等。使用此最终查询构建作为

select DATE_SUB(1511846832475,INTERVAL 2 'DAY')

但是当我运行它时抛出以下异常。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Day')' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

最佳答案

据我所知,您不能使用占位符表示间隔单位。这样做的原因是,如您所见,将单元绑定(bind)为字符串将用单引号将其转义。但是可以为数量使用占位符,您已经在代码片段中这样做了。

我可以提供两种解决方法。一种是根据时间间隔是 DAY、MINUTE 等,您有单独的准备语句。但这对您来说可能有点笨拙。另一种解决方法是将所有间隔值转换为通用单位,例如分钟。然后,只需对所有内容使用以下单个准备好的语句:

String query = "SELECT DATE_SUB(UTC_TIMESTAMP(), INTERVAL ? MINUTE)";
PreparedStatement ps = conn.prepareStatement(query);
ps.setInt(1, timeInterval);

关于java - 如何使用java准备语句在mysql的date_sub函数中添加单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47524582/

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