gpt4 book ai didi

java - PreparedStatement.setString() 调用行为异常

转载 作者:行者123 更新时间:2023-12-01 07:40:45 24 4
gpt4 key购买 nike

这可能非常简单,但我不明白出了什么问题。

作为背景,我将PreparedStatements 与模板查询一起使用以提高效率。我调用 setString(index, argument) 来填充模板的部分内容,填充所有字段后,我调用执行语句。

以下是当前情况的片段(当然它是有效的):

   stmnt.setInt(1, node.getI_ID());
stmnt.setString(2, node.getTime());
stmnt.setInt(3, node.getMemoryAddress());
stmnt.executeUpdate();

getI_ID 返回一个 5 位 int 数字,如 10014,与 getMemoryAddress 相同。 getTime 返回类似“2011-03-14_13:23:00”的日期时间。

目标是当查询最终执行该日期时间的小时时,但增加了 1,但我受到 getTime 返回的值无法修改这一事实的限制,即这应该通过添加一些来完成快速而肮脏的 SQL 代码。

这是我最初想到的:

   stmnt.setInt(1, node.getI_ID());
stmnt.setString(2, node.getTime() + " interval 1 hour");
stmnt.setInt(3, node.getMemoryAddress());
stmnt.executeUpdate();

但是,执行时, getTime 的未修改值应该出现在我新添加的行中。当PreparedStatement 将字符串转换为VARCHAR 或DATETIME 时,字符串上是否存在适用的条件?或者字符串可能不包含多个标记或其他内容?

此外,我无法在查询模板中添加“间隔 1 小时”,因为并非所有节点都需要添加一个小时。

非常感谢任何帮助。谢谢。

最佳答案

在声明中

   stmnt.setString(2, node.getTime() + " interval 1 hour");

字符串连接发生在 Java 中,而不是 SQL 中。如果 node.getTime() 返回,请说“2011-03-14_13:23:00”,您将在 setString() 中发送以下值:

"2011-03-14_13:23:00 interval 1 hour"

这可能不是您想要的。 “间隔 1 小时”不会修改 SQL,它是赋予 SQL 语句的的一部分。

如果要将小时加 1,您应该将字符串值解析为 GregorianCalendar,在那里增加小时,然后格式化结果并将其发送到 SQL 语句。例如:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String input = "2011-03-14_13:23:00";
Date d = df.parse(input);
GregorianCalendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.HOUR_OF_DAY, 1);
String output = df.format(c.getTime());

关于java - PreparedStatement.setString() 调用行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303569/

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