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

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

Barbara Streisand
リリース: 2024-10-31 00:48:29
オリジナル
454 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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