ホームページ > Java > &#&チュートリアル > MySQL PreparedStatement 構文エラー: `?` プレースホルダーで `executeQuery()` が失敗するのはなぜですか?

MySQL PreparedStatement 構文エラー: `?` プレースホルダーで `executeQuery()` が失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-12-06 07:30:11
オリジナル
1029 人が閲覧しました

MySQL PreparedStatement Syntax Error: Why is `executeQuery()` Failing with `?` Placeholders?

MySQL 構文エラー: PreparedStatement 構文について

PreparedStatement を使用してクエリを実行する Java コードで、MySQL 構文エラー (エラー) が発生しました。番号 1064)。このエラーは通常、SQL 構文自体に問題がある場合にスローされます。

エラーの原因の特定:

提供されたコードは、次のことを試みていることを示しています。 「?」で表されるプレースホルダーを含むクエリを実行します。 MySQL は「?」を解釈しません。文字をプレースホルダーとして使用し、代わりに SQL ステートメントの一部として扱います。

解決策: 引数なしのexecuteQuery() メソッドを利用する

この問題を解決するには、次のようにする必要があります。クエリ文字列を引数として指定せずに、プリペアド ステートメントのexecuteQuery() メソッドを実行します。

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(); // Correct syntax
ログイン後にコピー

By executeQuery() でクエリ文字列を省略すると、準備されたステートメントで、指定されたパラメーター値を使用して以前に定義されたクエリを実行できるようになります。

注意: リソース リーク

現在、コードにはリソースの割り当てと割り当て解除が適切に処理されていません。 try ブロックのfinally ブロックで取得したすべてのリソース (Connection、Statement、ResultSet) を閉じるという JDBC イディオムを使用することをお勧めします。そうしないと、アプリケーションが時間の経過とともにデータベースのリソースを使い果たし、不安定になる可能性があります。

以上がMySQL PreparedStatement 構文エラー: `?` プレースホルダーで `executeQuery()` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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