1. ホーム
  2. java

[解決済み] java.sql.SQLException パラメータインデックスが範囲外です(1 > パラメータ数、これは0です)[closed]。

2022-02-04 08:14:39

質問事項

選択したコンボボックスが検証された後、データベースに挿入することができません。Tomcatは次のようなエラーを出します。

java.sql.SQLException: パラメータインデックスが範囲外です(パラメータ数1、0)。

この原因は何ですか、またどのように解決すればよいですか?

どのように解決するのですか?

のいずれかを呼び出すと、このエラーが表示されます。 setXxx() メソッドを PreparedStatement 一方、SQL クエリ文字列にはプレースホルダーがありません。 ? を使用します。

例えば、これは いけない :

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

プレースホルダーを指定するために、SQLクエリ文字列を適宜修正する必要があります。

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

パラメータのインデックスが 1 を実行していること。 ではない のようにプレースホルダーを引用する必要があります。

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

なぜなら、SQL パーサーはこれらを実際の文字列値として解釈してしまい、プレースホルダーを見つけることができなくなってしまうからです。

こちらもご覧ください。