使用 Java PreparedStatement 时,未检测到问号占位符。调用statementName .setLong(1, 123)时会抛出错误“列索引超出范围:1,列数:0” 。我的示例来自 Postgres 8.4,但问题发生在 SQL 有机会进入 SQL 服务器之前。
在与一些工作准备好的语句进行比较后,我意识到损坏的语句包含一个类似于以下内容的子查询:
SELECT * FROM (
SELECT DISTINCT (name)
id,
name
FROM MyTable
WHERE id > ?
ORDER BY name) AS Level1
ORDER BY 1