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>
呼び出しの前に、PreparedStatement
、setString()
などを使用してすでに setInt()
にバインドされています。 クエリ文字列を引数として再度指定すると、このバインディングがオーバーライドされ、構文エラーが発生します。 executeQuery()
は、事前にバインドされたパラメーターを使用してステートメントを実行するだけです。executeQuery()
以上がMySQL PreparedStatement: `executeQuery()` が構文エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。