Rumah  >  Artikel  >  pangkalan data  >  Mengapa saya mendapat Pengecualian MySQLSyntaxError apabila menggunakan PreparedStatements dalam aplikasi Java saya?

Mengapa saya mendapat Pengecualian MySQLSyntaxError apabila menggunakan PreparedStatements dalam aplikasi Java saya?

Barbara Streisand
Barbara Streisandasal
2024-10-31 07:38:02723semak imbas

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

JDBC Mengembalikan Pengecualian MySQLSyntaxError Walaupun Penyataan Betul

Apabila melaksanakan pernyataan INSERT dalam aplikasi Java yang menyambung ke pangkalan data MySQL, MySQLSyntaxError Exception ialah dihadapi. Walaupun mengesahkan ketepatan pernyataan menggunakan MySQL Workbench, ralat berterusan.

Memeriksa kod yang disediakan mendedahkan isu ini terletak pada penggunaan ruang letak (?) dalam PreparedStatement. Pemegang tempat ini harus ditetapkan dengan betul menggunakan kaedah setXXX() dan bukannya muncul dalam rentetan SQL yang diluluskan untuk executeUpdate().

Berikut ialah kod yang diubah suai:

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;
}

Perhatikan bahawa executeUpdate( sqlString) hanya boleh digunakan dengan objek Pernyataan, bukan objek PreparedStatement. Menggunakannya secara tidak betul seperti yang ditunjukkan dalam kod asal akan mengakibatkan ralat sintaks.

Selain itu, disyorkan untuk menutup PreparedStatement dalam blok akhirnya untuk mengelakkan kebocoran sumber sekiranya berlaku pengecualian. Ini terpakai pada Connection, Statement dan ResultSet juga.

Atas ialah kandungan terperinci Mengapa saya mendapat Pengecualian MySQLSyntaxError apabila menggunakan PreparedStatements dalam aplikasi Java saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn