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

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

Patricia Arquette
Lepaskan: 2024-12-23 08:44:10
asal
739 orang telah melayarinya

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

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

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

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!

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