Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQLSyntaxErrorException gần? khi cố gắng thực thi PreparedStatement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '? hoặc MemberName =? ' ở dòng 1

MySQL không hiểu ý nghĩa của ? trong truy vấn SQL. Nó thực sự là cú pháp SQL không hợp lệ. Vì vậy, bằng cách nào đó, nó không bị thay thế bởi PreparedStatement . Và đoán xem?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Bạn đang ghi đè truy vấn đã chuẩn bị bằng truy vấn ban đầu! Bạn cần gọi không đối số PreparedStatement#executeQuery() thay vì Statement#executeQuery(String) .

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Không liên quan đến vấn đề, mã của bạn đang rò rỉ tài nguyên. DB sẽ hết chúng sau vài giờ và ứng dụng của bạn sẽ gặp sự cố. Để khắc phục điều này, bạn cần làm theo thành ngữ JDBC về đóng Connection , StatementResultSet trong finally khối try chặn nơi chúng được lấy. Xem hướng dẫn cơ bản về JDBC để biết thêm chi tiết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kiểm tra đặc quyền của người dùng trong MySQL Workbench bằng GUI

  2. Giới thiệu về Chỉ mục SQL

  3. Học MySQL / MariaDB cho người mới bắt đầu - Phần 1

  4. Nâng cao tiêu chuẩn về quản lý MySQL, MariaDB, PostgreSQL &MongoDB

  5. Cột không xác định trong mệnh đề Where