PreparedStatement を使用しているにもかかわらず、Java コードで MySQLSyntaxError 例外が発生するのはなぜですか?

Susan Sarandon
リリース: 2024-10-31 00:35:30
オリジナル
252 人が閲覧しました

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a PreparedStatement?

JDBC が正しいステートメントにもかかわらず MySQLSyntaxError 例外を返す

MySQL テーブルに新しい行を挿入しようとしたときに、Java アプリケーションで MySQLSyntaxError 例外が発生しました。 SQL ステートメントを調べると、構文的に正しいことがわかりました。ただし、MySQL Workbench を使用して直接実行すると、ステートメントは成功しました。

以下に示すように、問題のコードは PreparedStatement を使用して INSERT ステートメントを実行しました。

<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
sInserim.setString(1, utente);
sInserim.setString(2, nome);
sInserim.executeUpdate(sqlCommandInserim);</code>
ログイン後にコピー

発生した例外は次のとおりです。

<code class="text">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 '? , ? , DEFAULT , NULL )' at line 1</code>
ログイン後にコピー

詳しく調べると、プレースホルダー (?) が PreparedStatement によって適切に置き換えられていないことが判明しました。これは、次の行から明らかです:

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
ログイン後にコピー

PreparedStatement オブジェクトとその設定値を使用する代わりに、生の SQL 文字列を引数としてexecuteUpdate() メソッドが呼び出されていました。

この問題を修正するために、コードは次のように変更されました。

<code class="java">sInserim.executeUpdate();</code>
ログイン後にコピー

SQL 文字列引数なしでexecuteUpdate() を使用すると、PreparedStatement の値が自動的に使用され、MySQLSyntaxError 例外が解決されます。

注:

上記の問題とは直接関係ありませんが、Finally ブロック内の PreparedStatement (および Connection、Statement、ResultSet などのその他のリソース) を閉じることをお勧めします。例外が発生した場合のリソース リークを防ぎます。

以上がPreparedStatement を使用しているにもかかわらず、Java コードで MySQLSyntaxError 例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!