ホームページ > データベース > mysql チュートリアル > MySQL PreparedStatement: `executeQuery()` が構文エラーで失敗するのはなぜですか?

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

Susan Sarandon
リリース: 2025-01-11 15:26:41
オリジナル
175 人が閲覧しました

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

MySQL プリペアド ステートメント: executeQuery() 構文エラーの解決

MySQL で Java の PreparedStatement を使用する場合の一般的な問題には、プレースホルダー (SQLException) 付近の SQL 構文の問題を示す ? エラーが含まれます。 これは多くの場合、ステートメントが誤って実行されたことが原因で発生します。

問題:

PreparedStatement を使用する Java コードは、次のような例外をスローする可能性があります。

<code>... 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 '?'</code>
ログイン後にコピー

間違ったアプローチ:

エラーは通常、文字列引数 (SQL クエリ自体など) を指定した PreparedStatement を使用して executeQuery() を実行しようとすると発生します。

<code class="language-java">statement.executeQuery(searchPerson); // Incorrect</code>
ログイン後にコピー

これは、searchPerson をリテラル SQL 文字列として扱い、PreparedStatement 内に設定されたプレースホルダーを無視します。

正しい解決策:

重要なのは、PreparedStatement にパラメータを渡さず を実行することです:executeQuery()

<code class="language-java">statement.executeQuery(); // Correct</code>
ログイン後にコピー
パラメータは、

呼び出しの前に、PreparedStatementsetString() などを使用してすでに setInt() にバインドされています。 クエリ文字列を引数として再度指定すると、このバインディングがオーバーライドされ、構文エラーが発生します。 executeQuery() は、事前にバインドされたパラメーターを使用してステートメントを実行するだけです。executeQuery()

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

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