JDBC が正しいステートメントにもかかわらず MySQLSyntaxError 例外を返す
MySQL データベースに接続している Java アプリケーションで INSERT ステートメントを実行すると、MySQLSyntaxError 例外が発生します。遭遇した。 MySQL Workbench を使用してステートメントの正しさを検証したにもかかわらず、エラーが継続します。
提供されたコードを調べると、PreparedStatement 内のプレースホルダー (?) の使用に問題があることがわかります。これらのプレースホルダーは、executeUpdate() に渡される SQL 文字列に含めるのではなく、setXXX() メソッドを使用して適切に設定する必要があります。
変更されたコードは次のとおりです。
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); ResultSet risultatiUtente=sUser.executeQuery(); String utente = null; while(risultatiUtente.next()){ utente=risultatiUtente.getString(1); } sUser.close(); PreparedStatement sInserim=conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); //sInserim.setObject(3,g); System.out.println(sInserim.toString()); sInserim.executeUpdate(); // Execute the prepared statement without the SQL string sInserim.close(); return true; } catch(SQLException e){ // Log the exception and handle appropriately } finally { if (sInserim != null) { sInserim.close(); } } } else return false; }
executeUpdate( sqlString) メソッドは、PreparedStatement オブジェクトではなく、Statement オブジェクトでのみ使用する必要があります。元のコードに示されているようにこれを誤って使用すると、構文エラーが発生します。
さらに、例外が発生した場合のリソース リークを防ぐために、finally ブロック内で PreparedStatement を閉じることをお勧めします。これは、Connection、Statement、ResultSet にも同様に適用されます。
以上がJava アプリケーションで PreparedStatements を使用すると MySQLSyntaxError 例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。