ホームページ > データベース > mysql チュートリアル > `s.executeQuery(query)` が「near '?'」で MySQLSyntaxErrorException を引き起こすのはなぜですか?

`s.executeQuery(query)` が「near '?'」で MySQLSyntaxErrorException を引き起こすのはなぜですか?

Patricia Arquette
リリース: 2024-12-23 08:44:10
オリジナル
739 人が閲覧しました

Why Does `s.executeQuery(query)` Cause a MySQLSyntaxErrorException

「?」付近の MySQLSyntaxErrorException: PreparedStatements による構文エラーの解決

Java で PreparedStatement を実行すると、構文エラーが発生することがあります。恐ろしい「near '?'」例外。原因と解決策を理解するために、問題を詳しく調べてみましょう。

問題の説明

PreparedStatement を実行しようとすると、エラー コード 1064 が発生し、構文を示す MySQLSyntaxErrorException が発生します。エラー。 MySQL クエリ ブラウザを使用したクエリ内の値の置換は成功し、問題がコード内にあることを示唆しています。

関連コード

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query); // Error
ログイン後にコピー

例外

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? or MemberName = ?' at line 1
ログイン後にコピー

解決策

このエラーの根本原因は次のとおりです。 MySQL は未処理の「?」を検出します。 SQLクエリ内で。これを解決するには、次の手順に従います。

  1. オーバーライドされた Prepared Query: コードは、PreparedStatements の意図された動作をオーバーライドしていることに注意してください。 ResultSet rs = s.executeQuery(query); の行は正しくありません。
  2. 正しい実行: 代わりに、引数なしの PreparedStatement#executeQuery() メソッドを使用して、準備されたクエリを正しく実行します。
ResultSet rs = s.executeQuery();
ログイン後にコピー

追加考慮事項

  • リソース リーク: コードが接続、ステートメント、および結果セットを適切に閉じていません。リソースのリークを避けるために、try-with-resources ブロックを実装します。

以上が`s.executeQuery(query)` が「near '?'」で MySQLSyntaxErrorException を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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