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