有効な INSERT ステートメントを使用しているにもかかわらず、JDBC コードが MySQLSyntaxErrorException をスローするのはなぜですか?

Susan Sarandon
リリース: 2024-10-31 07:14:01
オリジナル
273 人が閲覧しました

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

JDBC 例外: 有効な SQL ステートメントの MySQLSyntaxError

この記事では、JDBC を使用してデータをMySQLデータベース。 MySQL Workbench で有効な INSERT ステートメントを実行したにもかかわらず、MySQLSyntaxError 例外を受け取りました。

根本的な原因を調査するには、コードを分析しましょう:

<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){
    if(connessioneAperta()){
        try{
            String sqlCommandUser = "SELECT USER()";
            String sqlCommandInserim = "INSERT INTO salvataggi VALUES ( ? , ? , DEFAULT , NULL );";
            PreparedStatement sUser = conn.prepareStatement(sqlCommandUser);
            ... // Execute user query
            PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            System.out.println(sInserim);
            sInserim.executeUpdate(sqlCommandInserim);
            ... // Close PreparedStatements and ResultSet
        }
        catch(SQLException e){
            e.printStackTrace();
            return false;
        }
    }
    else
        return false;
}</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 '? , ? , DEFAULT , NULL )' at line 1
ログイン後にコピー

このエラーは、SQL ステートメントに構文エラーがあることを示します。ただし、INSERT ステートメントは正しいようです。

詳しく調べると、executeUpdate() メソッドは PreparedStatement sInserim の代わりに String 引数 SQLCommandInserim を受け取ることがわかります。これはコードの見落としです。

解決策:

この問題を解決するには、次の行を次の行に置き換えます:

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

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

PreparedStatement でexecuteUpdate() を呼び出すことにより、JDBC はsetString() メソッドを使用して設定された値を持つプレースホルダー (?) は、構文エラーを防ぎます。

追加の考慮事項:

finally を使用することも推奨されます。ブロックを使用してすべてのデータベース オブジェクト (PreparedStatements、Connections、Statements、ResultSets) を閉じ、次のような場合のリソース リークを防ぎます。例外。

以上が有効な INSERT ステートメントを使用しているにもかかわらず、JDBC コードが MySQLSyntaxErrorException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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