ホームページ >データベース >mysql チュートリアル >データの挿入時に Java アプリケーションが MySQLSyntaxError 例外をスローするのはなぜですか?

データの挿入時に Java アプリケーションが MySQLSyntaxError 例外をスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 02:32:301089ブラウズ

Why Does My Java Application Throw a MySQLSyntaxError Exception When Inserting Data?

有効なステートメントを持つ MySQLSyntaxError 例外を報告する JDBC

MySQL データベースに接続している Java アプリケーションで、新しいデータを挿入しようとしたときに例外が発生しました行をテーブルに追加します。 MySQL Workbench の使用時に INSERT ステートメントが正常に実行されたにもかかわらず、MySQLSyntaxError 例外がスローされました。

提供されたコードは次のとおりです。

<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){
    //...
    PreparedStatement sInserim=conn.prepareStatement(sqlCommandInserim);
    sInserim.setString(1, utente);
    sInserim.setString(2, nome);
    //sInserim.setObject(3,g);
    System.out.println(sInserim.toString());
    sInserim.executeUpdate(sqlCommandInserim);
    sInserim.close();
    return true;
    //...
}</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

原因

このエラーは、INSERT ステートメントに構文の問題があることを示しています。ただし、確認すると、ステートメントは有効であるようです。

解決策

問題は次の行にあります。

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>

この行は、次の行を試行します。設定された値を使用して PreparedStatement を実行するのではなく、生の SQL 文字列を実行します。 PreparedStatement を実行する適切な方法は次のとおりです。

<code class="java">sInserim.executeUpdate();</code>

追加の考慮事項

この特定の問題とは別に、PreparedStatement を使用するとリソース リークが発生する可能性があることに注意することが重要です。正しく閉まっていない。これを防ぐには、finally ブロックを使用して、Connection、Statement、ResultSet などの他のリソースとともに PreparedStatement を閉じることをお勧めします。

以上がデータの挿入時に Java アプリケーションが MySQLSyntaxError 例外をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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