ホームページ >データベース >mysql チュートリアル >Java アプリケーションで PreparedStatements を使用すると MySQLSyntaxError 例外が発生するのはなぜですか?
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 サイトの他の関連記事を参照してください。