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
Linda Hamiltonasal
2025-01-01 02:31:09201semak imbas

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

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!

Penyelesaian Masalah

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

rs = s.executeQuery(query); // Fail!

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!

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
}

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!

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