为Derby DB使用PreparedStatement时的SQLException

mid*_*nhk 1 java sql derby

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

UPDATE tbl_HitsCounter SET count = ? WHERE keyid = (SELECT id FROM tbl_HitsMaster WHERE sitename = '?')
Run Code Online (Sandbox Code Playgroud)

现在,当我设置第二个参数时,这是一个字符串值,我得到一个奇怪的SQLException.

preparedStatement.setInt(1, 99);
preparedStatement.setString(2, masterKey);
Run Code Online (Sandbox Code Playgroud)

当执行setString()方法时,我得到一个SQLException

The column position '2' is out of range.  The number of columns for this ResultSet is '1'.
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么,我甚至没有执行executeUpdate()方法.

mu *_*ort 5

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

UPDATE tbl_HitsCounter
SET count = ?
WHERE keyid = (
    SELECT id
    FROM tbl_HitsMaster
    WHERE sitename = ?
)
Run Code Online (Sandbox Code Playgroud)

注意缺少报价sitename = ?.这是一个占位符:?.这是一个SQL问号字符串文字:'?'.