ホームページ >Java >&#&チュートリアル >Java データベース コードで「パラメータ インデックスが範囲外です」エラーが発生するのはなぜですか?

Java データベース コードで「パラメータ インデックスが範囲外です」エラーが発生するのはなぜですか?

DDD
DDDオリジナル
2024-12-13 01:51:10566ブラウズ

Why Am I Getting a

Java データベースのパラメータ インデックスが範囲外エラーです

Java を使用してデータベースと対話しようとすると、「java」エラーが発生する場合があります。 .sql.SQLException: パラメーター インデックスが範囲外です (1 > パラメーターの数、つまり 0)。」このエラーは、SQL ステートメントとそのパラメータに指定された値との間に不一致があることを示します。

原因:

このエラーは、PreparedStatement を使用してパラメータを設定しようとすると発生します。オブジェクトですが、対応する SQL ステートメントにはそのパラメーターのプレースホルダー (?) が含まれていません。クエリ内で対応するプレースホルダーを指定せずに setString() または他のセッター メソッドを使用すると、このエラーが発生します。

解決策:

このエラーを解決するには、SQL ステートメントが次のように設定されていることを確認してください。 PreparedStatement オブジェクトを通じて設定するすべてのパラメータのプレースホルダが含まれています。プレースホルダーはステートメント内では疑問符 (?) として表す必要があります。

例:

間違ったステートメント:

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

正しいステートメント:

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

追加考慮事項:

  • パラメータのインデックスは 1 から始まるため、ステートメント内の最初のプレースホルダは、PreparedStatement を通じて設定した最初のパラメータに割り当てる必要があります。
  • single または double の使用は避けてください。プレースホルダーを引用符で囲みます。これにより、プレースホルダーは文字列値として解釈されます。

その他のリソース:

  • [JDBC チュートリアル - 準備されたステートメント](https://docs.oracle.com/javase/tutorial /jdbc/basics/prepared.html)

以上がJava データベース コードで「パラメータ インデックスが範囲外です」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。