ホームページ  >  記事  >  データベース  >  MySQL JDBC のプリペアド ステートメントが「MySQLSyntaxErrorException」をスローするのはなぜですか?

MySQL JDBC のプリペアド ステートメントが「MySQLSyntaxErrorException」をスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 00:48:29359ブラウズ

Why Does My Prepared Statement in MySQL JDBC Throw a

MySQL プリペアド ステートメント: 「MySQLSyntaxErrorException」エラーの克服

JDBC for MySQL でプリペアド ステートメントを利用する場合、適切な構文と使用法。開発者が直面する一般的なエラーの 1 つは、「MySQLSyntaxErrorException」です。このエラーの特定のインスタンスと対応する解決策を見てみましょう。

問題:

MySQL コネクタを使用する Java ベースのアプリケーションで、実行時に「MySQLSyntaxErrorException」が発生します。準備された声明。このコードでは、データの取得に次のステートメントを使用します:

<code class="java">PreparedStatement stmt = con.prepareStatement(selectSQL);
stmt.setInt(1, ad_id);
rs = stmt.executeQuery(selectSQL);</code>

実行すると、エラーがスローされます。

エラー メッセージ:

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 '?' at line 1

解決策:

エラーは準備されたステートメントを実行する構文内にあります。具体的には、次の行は正しくありません:

<code class="java">rs = stmt.executeQuery(selectSQL);</code>

準備されたステートメントを実行するための正しい構文は次のとおりです:

<code class="java">rs = stmt.executeQuery();</code>

executeQuery メソッドから selectSQL 引数を省略すると、ステートメントが実行されます。

説明:

準備されたステートメントでは、SQL クエリはステートメントの準備中に渡され、パラメーターはsetX メソッド (setInt など)。結果セットを取得するには、executeQuery メソッドを使用します。このメソッドは引数なしで呼び出す必要があります。元のコードでは、executeQuery メソッド呼び出しに SQL クエリ文字列が誤って含まれており、構文エラーが発生しました。

以上がMySQL JDBC のプリペアド ステートメントが「MySQLSyntaxErrorException」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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