Rumah > Java > javaTutorial > Mengapa Pernyataan Persediaan Saya di Java Membuang Ralat Sintaks MySQL Dekat '?'?

Mengapa Pernyataan Persediaan Saya di Java Membuang Ralat Sintaks MySQL Dekat '?'?

Linda Hamilton
Lepaskan: 2025-01-01 02:31:09
asal
176 orang telah melayarinya

Why Does My PreparedStatement in Java Throw a MySQL Syntax Error Near

Ralat Sintaks MySQL dengan Soalan PreparedStatement

Apabila cuba melaksanakan pertanyaan dengan PreparedStatement dalam Java, ralat berlaku yang menunjukkan ralat sintaks berhampiran "?". Pengecualian ialah:

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 '? or MemberName = ?' at line 1
Salin selepas log masuk

Coretan Kod

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query); // Fail!
Salin selepas log masuk

Penyelesaian Masalah

Ralat berlaku kerana MySQL tidak mengenali "?" dalam pertanyaan SQL sebagai pemegang tempat. Ini disebabkan oleh panggilan berikut:

rs = s.executeQuery(query); // Fail!
Salin selepas log masuk

Daripada menggunakan PreparedStatement#executeQuery tanpa argumen, rentetan pertanyaan asal diluluskan, yang mengatasi pernyataan yang disediakan.

Untuk menyelesaikan isu , kaedah executeQuery bagi PreparedStatement hendaklah dipanggil tanpa hujah:

rs = s.executeQuery(); // OK!
Salin selepas log masuk

Sumber Kebocoran

Walaupun tidak berkaitan dengan masalah asal, kod tersebut membocorkan sumber. Untuk mengelakkan ini, sumber hendaklah ditutup menggunakan simpulan bahasa JDBC:

try {
    // Acquire resources here
} catch (Exception e) {
    // Handle exception
} finally {
    // Close resources here
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Pernyataan Persediaan Saya di Java Membuang Ralat Sintaks MySQL Dekat '?'?. 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