Rumah >pangkalan data >tutorial mysql >Mengapakah `s.executeQuery(query)` Menyebabkan MySQLSyntaxErrorException 'berhampiran '?''?

Mengapakah `s.executeQuery(query)` Menyebabkan MySQLSyntaxErrorException 'berhampiran '?''?

Patricia Arquette
Patricia Arquetteasal
2024-12-23 08:44:10800semak imbas

Why Does `s.executeQuery(query)` Cause a MySQLSyntaxErrorException

MySQLSyntaxErrorException near "?": Menyelesaikan Ralat Sintaks dengan PreparedStatements

Melaksanakan PreparedStatements dalam Java yang kadangkala boleh menghadapi ralat sintaks, salah satunya ditakuti "berhampiran '?'" pengecualian. Untuk memahami punca dan penyelesaiannya, mari kita mendalami isu tersebut.

Perihalan Masalah

Percubaan untuk melaksanakan PreparedStatement hasil dalam MySQLSyntaxErrorException dengan kod ralat 1064, menunjukkan sintaks ralat. Penggantian nilai dalam pertanyaan menggunakan penyemak imbas pertanyaan MySQL berjaya, menunjukkan bahawa isu itu terletak dalam kod.

Berkaitan 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); // Error

Pengecualian

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

Penyelesaian

Punca ralat ini ialah MySQL menemui "?" yang belum diproses dalam pertanyaan SQL. Untuk menyelesaikannya, ikuti langkah berikut:

  1. Timpa Pertanyaan Disediakan: Ambil perhatian bahawa kod itu mengatasi gelagat PreparedStatements yang dimaksudkan. Baris ResultSet rs = s.executeQuery(query); adalah tidak betul.
  2. Pelaksanaan Betul: Sebaliknya, gunakan kaedah PreparedStatement#executeQuery() tanpa argumentasi untuk melaksanakan pertanyaan yang disediakan dengan betul.
ResultSet rs = s.executeQuery();

Tambahan Pertimbangan

  • Kebocoran Sumber: Kod tidak menutup sambungan, pernyataan dan keputusan yang ditetapkan dengan sewajarnya. Laksanakan blok cuba-dengan-sumber untuk mengelakkan kebocoran sumber.

Atas ialah kandungan terperinci Mengapakah `s.executeQuery(query)` Menyebabkan MySQLSyntaxErrorException 'berhampiran '?''?. 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