ホームページ > データベース > mysql チュートリアル > 「java.sql.SQLException: パラメータ インデックスが範囲外です」というメッセージが表示されるのはなぜですか?

「java.sql.SQLException: パラメータ インデックスが範囲外です」というメッセージが表示されるのはなぜですか?

Susan Sarandon
リリース: 2024-12-24 00:24:20
オリジナル
910 人が閲覧しました

Why Am I Getting

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

このエラーが発生しますSQL 内に対応するプレースホルダーがないプリペアド ステートメントにパラメータを設定しようとしたときquery.

原因:

  • SQL クエリに、ステートメントに設定されているパラメーターの数に対して十分なプレースホルダー (?) が含まれていません。
  • パラメータ化されたステートメントをパラメータ化されていないステートメントと誤って使用しています。 queries.

解決策:

このエラーを解決するには、設定されているパラメータに対して正しい数のプレースホルダが SQL クエリに含まれていることを確認してください。例:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
ログイン後にコピー

補足:

  • パラメータのインデックスは 1 から始まるため、正しい順序で設定していることを確認してください。
  • >
  • SQL クエリではプレースホルダーを引用符で囲まないでください。これにより、プレースホルダーが文字列として扱われることになります。 value.
  • パラメータ化されていないクエリを使用している場合は、パラメータをクエリ文字列に直接設定する必要があります:
String sql = String.format("INSERT INTO tablename (col1, col2, col3) VALUES (%s, %s, %s)", val1, val2, val3);
ログイン後にコピー

References:

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

以上が「java.sql.SQLException: パラメータ インデックスが範囲外です」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート