gpt4 book ai didi

java - SQL 准备语句中的参数化查询

转载 作者:行者123 更新时间:2023-12-01 04:36:13 27 4
gpt4 key购买 nike

我有一个连接到数据库的java程序,我正在尝试使用准备好的语句和参数化查询来更新数据库中的某些内容。这是我的部分代码:

updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " +
"SET COLUMNDISPLAYNAME = ? + ' Value Set Identifier' " +
"WHERE COLUMNDISPLAYNAME = ? + 'VALSETID' and TABLENAME = ?");

我为问号参数输入的第一对值是 1- Account、2- ACCT,第三个值无关紧要。我的问题是---> 有什么方法可以将问号组合到字符串值吗?加号不起作用我收到错误“ORA=01722:无效数字”

在查找该错误的含义后,我将代码更改为如下所示:

 updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " +
"SET COLUMNDISPLAYNAME = '? Value Set Identifier' " +
"WHERE COLUMNDISPLAYNAME = '?VALSETID' and TABLENAME = ?");

这也不起作用。那么有没有办法将问号与字符串组合起来呢?

谢谢!

编辑----------> 我决定取出 ? 之后的字符串文本。并将其放在不同的位置:

updateValSetId.setString(1, f.getValue() + " Value Set Identifier");
updateValSetId.setString(2, f.getKey() + "VALSETID");
updateValSetId.setString(3, e.getKey());
updateValSetId.executeUpdate();

这是在我准备好的语句之后,当我将值分配给?范围。 “f”和“e”是我存储数据的 HashMap ,我想知道为什么当我将字符串添加到从 getValue 和 getKey 获得的值时,上面的代码不起作用。我没有收到任何错误,它可以编译并运行,但不会更新我想要在数据库中更新的值。例如,ACCT 是第一个键,Account 是第一个值,因此当它们传入时,它们最终应该添加到 getters 之后的字符串中,因此数据库应该将 ACCTVALSETID 更新为 Account Value Set Identifier,对吧?我错过了什么?

谢谢!

最佳答案

我所做的编辑实际上是正确的,我的代码的其他部分有错误,以下代码有效:

updateValSetId.setString(1, f.getValue() + " Value Set Identifier");
updateValSetId.setString(2, f.getKey() + "VALSETID");
updateValSetId.setString(3, e.getKey());
updateValSetId.executeUpdate();

所以我猜你不能将字符串值添加到?参数,但这与将其添加到 ?

完全相同

关于java - SQL 准备语句中的参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300925/

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