1

我有一个连接到数据库的 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' 是我存储数据的哈希图,我想知道为什么当我将字符串添加到从 getValue 和 getKey 获得的值时,上面的代码也不起作用。我没有收到任何错误,它会编译并运行,但不会更新我希望它在数据库中的值。例如,ACCT 是第一个键,Account 是第一个值,所以当它们被传入时,它们最终应该被添加到我在 getter 之后的字符串中,因此数据库应该将 ACCTVALSETID 更新为 Account Value Set Identifier,对? 我错过了什么?

谢谢!

4

1 回答 1

0

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

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

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

于 2013-06-26T12:42:55.907 回答