ホームページ  >  記事  >  データベース  >  Java アプリケーションで PreparedStatements を使用すると MySQLSyntaxError 例外が発生するのはなぜですか?

Java アプリケーションで PreparedStatements を使用すると MySQLSyntaxError 例外が発生するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 07:38:02723ブラウズ

Why am I getting a MySQLSyntaxError Exception when using PreparedStatements in my Java application?

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 サイトの他の関連記事を参照してください。

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