有効なステートメントを持つ 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 サイトの他の関連記事を参照してください。