我有一个要使用 PreparedStatement 运行的 SQL 查询,它是
UPDATE tbl_HitsCounter SET count = ? WHERE keyid = (SELECT id FROM tbl_HitsMaster WHERE sitename = '?')
现在,当我设置第二个参数(一个字符串值)时,我得到了一个奇怪的 SQLException。
preparedStatement.setInt(1, 99);
preparedStatement.setString(2, masterKey);
在执行 setString() 方法时,我得到一个 SQLException
The column position '2' is out of range. The number of columns for this ResultSet is '1'.
我不知道这是怎么回事,我什至还没有执行 executeUpdate() 方法。
最佳答案
您的 SQL 中只有一个占位符,但您正试图为第二个占位符赋值。你的问题是你引用了第二个占位符,你的 SQL 应该看起来更像这样:
UPDATE tbl_HitsCounter
SET count = ?
WHERE keyid = (
SELECT id
FROM tbl_HitsMaster
WHERE sitename = ?
)
请注意 sitename = ?
中缺少引号。这是一个占位符:?
。这是一个 SQL 问号字符串文字:'?'
。
关于java - 为 Derby DB 使用 PreparedStatement 时出现 SQLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892828/