Rumah > pangkalan data > tutorial mysql > Mengapa kod JDBC saya membuang MySQLSyntaxErrorException walaupun menggunakan pernyataan INSERT yang sah?

Mengapa kod JDBC saya membuang MySQLSyntaxErrorException walaupun menggunakan pernyataan INSERT yang sah?

Susan Sarandon
Lepaskan: 2024-10-31 07:14:01
asal
344 orang telah melayarinya

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

Pengecualian JDBC: MySQLSyntaxError dengan Pernyataan SQL Sah

Dalam artikel ini, kami menyelidiki isu yang dihadapi apabila menggunakan JDBC untuk memasukkan data ke dalam pangkalan data MySQL. Kami menerima Pengecualian MySQLSyntaxError walaupun melaksanakan pernyataan INSERT yang sah dalam MySQL Workbench.

Untuk menyiasat punca asas, mari analisa kod:

<code class="java">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);
            ... // Execute user query
            PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            System.out.println(sInserim);
            sInserim.executeUpdate(sqlCommandInserim);
            ... // Close PreparedStatements and ResultSet
        }
        catch(SQLException e){
            e.printStackTrace();
            return false;
        }
    }
    else
        return false;
}</code>
Salin selepas log masuk

Memeriksa surih tindanan:

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
Salin selepas log masuk

Ralat ini menunjukkan bahawa terdapat ralat sintaks dalam pernyataan SQL. Walau bagaimanapun, penyataan INSERT kami nampaknya betul.

Setelah diperiksa lebih dekat, kami mendapati bahawa kaedah executeUpdate() mengambil argumen String SQLCommandInserim dan bukannya PreparedStatement sInserim. Ini adalah kesilapan dalam kod.

Penyelesaian:

Untuk menyelesaikan isu ini, gantikan baris berikut:

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
Salin selepas log masuk

Dengan:

<code class="java">sInserim.executeUpdate();</code>
Salin selepas log masuk

Dengan menggunakan executeUpdate() pada PreparedStatement, JDBC akan menggantikan ruang letak (?) dengan nilai yang ditetapkan menggunakan kaedah setString(), menghalang ralat sintaks.

Pertimbangan Tambahan:

Ia juga disyorkan untuk menggunakan blok akhirnya untuk menutup semua objek pangkalan data (PreparedStatements, Connections, Statements dan ResultSets) untuk mengelakkan kebocoran sumber sekiranya berlaku pengecualian.

Atas ialah kandungan terperinci Mengapa kod JDBC saya membuang MySQLSyntaxErrorException walaupun menggunakan pernyataan INSERT yang sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan