ホームページ >Java >&#&チュートリアル >Java コードで「java.sql.SQLException: パラメーター インデックスが範囲外です (1 > パラメーターの数、つまり 0)」というメッセージが表示されるのはなぜですか?

Java コードで「java.sql.SQLException: パラメーター インデックスが範囲外です (1 > パラメーターの数、つまり 0)」というメッセージが表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-16 04:38:13132ブラウズ

私の Java コードでは

Why Am I Getting パラメータの数 (これは 0)" ですか? Java コードの「 /> パラメータの数、これは 0)」ですか? " />

トラブルシューティング "java.sql.SQLException: パラメーター インデックスが範囲外です (1 > パラメーターの数、つまり 0)"

レルム内Java プログラミングのエラー「java.sql.SQLException: パラメーター インデックスが範囲外です (1 > パラメーターの数、つまり0)" は、クエリ文字列に対応するプレースホルダーを指定せずに PreparedStatement を利用して SQL クエリを実行しようとすると発生します。

このエラーは、特に PreparedStatement で setXxx() メソッドを呼び出し、適切なデータ バインディングを確保するときに発生します。 SQL クエリにプレースホルダーが含まれていない場合、次のエラーが発生します。

原因:

エラーの根本的な原因は、SQL クエリにプレースホルダー (?) が存在しないことです。PreparedStatement は、これらのプレースホルダーに依存して、パラメータの挿入

解決策:

この問題を解決するには、SQL クエリを変更して、setXxx() メソッドを使用して設定する各パラメータのプレースホルダを含める必要があります。たとえば、

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

のようなクエリ文字列がある場合、それを次のように変更する必要があります。次のようになります:

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

パラメータのインデックスは 1 から始まることに注意することが重要です。したがって、次のようにプレースホルダを引用符で囲む必要はありません。

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

そうすると、次のようになります。 SQL パーサーは引用符で囲まれたプレースホルダーをパラメーターのプレースホルダーではなく実際の文字列値として扱うため、同じエラーが発生します。

追加の考慮事項:

さらに詳しい情報については、次のリソースを参照することをお勧めします:

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

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

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