为Derby DB使用PreparedStatement时的SQLException

时间:2011-05-05 04:56:23

标签: java sql derby

我有一个SQL查询,我将使用PreparedStatement运行,它是

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()方法。

1 个答案:

答案 0 :(得分:5)

您的SQL中只有一个占位符,但您正在尝试为第二个分配值。你的问题是你引用了第二个占位符,你的SQL看起来应该更像这样:

UPDATE tbl_HitsCounter
SET count = ?
WHERE keyid = (
    SELECT id
    FROM tbl_HitsMaster
    WHERE sitename = ?
)

请注意sitename = ?中缺少引号。这是一个占位符:?。这是一个SQL问号字符串文字:'?'