Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

パラメタ付き SQL(動的 SQL)でエラー

パラメタを含む SQL 文から PreparedStatement オブジェクトを得て、その SQL 文を実行しようとするとエラーが出る場合。次のようなエラーメッセージが特徴的。

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

この場合、SQL 文の '?' の前後にクオートが入っていないか確認する。例えば、

private final String GET_CUSTOMER = "SELECT * FROM CUSTOMER WHERE CUSTOMERID = '?'";
private final String ADD_CUSTOMER = "INSERT INTO CUSTOMER VALUES ('?', '?', '?')";

はダメなので、

private final String GET_CUSTOMER = "SELECT * FROM CUSTOMER WHERE CUSTOMERID = ?";
private final String ADD_CUSTOMER = "INSERT INTO CUSTOMER VALUES (?, ?, ?)";

とすること。