java - 为 Derby DB 使用 PreparedStatement 时出现 SQLException

标签 java sql derby

我有一个要使用 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/

相关文章:

mysql - 更新非主键列时出现重复条目

mysql - 学习 SQL 查询不能正常工作

java - 将 Oracle 或 Sql Server DDL 转换为 Derby

java - 使用 <form :hidden> 将 Map 值传递给 Spring MVC Controller

java - java 堆栈溢出错误

java - 新创建的 NavDrawer 上的 RuntimeException

java - 在图中寻找路径? (全局定位系统)?

mysql - 选择列值大于另一列值的行

php - 菜单从哪里填充?

sql - 使用 SQL select 语句的 derby clob 异常或建议我另一种没有长度设置的 derby 数据类型