SQL预处理语句中的参数化查询

时间:2013-06-25 15:04:45

标签: java sql prepared-statement parameterized-query

我有一个连接数据库的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 = ?");

也没用。那么有没有办法将问号与字符串结合起来?

谢谢!

EDIT ---------->我决定拿出字符串后的文字?把它放在一个不同的地方:

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

这是在我准备好的陈述之后,当我将值分配给?参数。 'f'和'e'是我存储数据的哈希图,我想知道为什么当我将字符串添加到我从ge​​tValue和getKey得到的值时上面的代码不起作用。我没有得到任何错误,它编译并运行但它不会更新我想要它在数据库中的值。例如,ACCT是第一个键,而Account是第一个值,因此当它们被传入时,它们最终应该被添加到我在getter之后的字符串中,因此数据库应该将ACCTVALSETID更新为Account Value Set Identifier, ?我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

的情况完全相同