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

Không thể đưa ra các câu lệnh thao tác dữ liệu với executeQuery ()

Bạn sẽ cần sử dụng phương thức executeUpdate () để thực thi câu lệnh INSERT, trong khi bạn sẽ cần sử dụng phương thức executeQuery () để thực thi câu lệnh SELECT. Điều này là do các yêu cầu do đặc điểm kỹ thuật của JDBC áp đặt đối với cách sử dụng của họ:

Từ tài liệu Java API cho Statement.executeQuery () :

và từ tài liệu Java API cho Statement.executeUpdate () :

Mã của bạn (mã giả được đăng ở đây) sẽ xuất hiện dưới dạng:

statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation

Và tất nhiên, Tài liệu MySQL trình bày cách thực hiện cùng một hoạt động cho các cột AUTO_INCREMENT , đó rõ ràng là thứ bạn cần.

Nếu bạn cần thực hiện cả hai cùng nhau trong cùng một giao dịch, bằng cách gửi các câu lệnh trong một chuỗi với dấu chấm phẩy phân tách chúng như sau:

statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");

thì bạn sẽ cần sử dụng phương thức execute (). Lưu ý rằng điều này phụ thuộc vào sự hỗ trợ được cung cấp bởi Cơ sở dữ liệu và trình điều khiển JDBC để ghép các câu lệnh với nhau trong một lần thực thi (). Điều này được hỗ trợ trong Sybase và MSSQL Server, nhưng tôi không nghĩ rằng nó được hỗ trợ trong MySQL.



  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 chọn cho đến khi đạt được tổng

  2. Làm cách nào để sử dụng jQuery để chạy các truy vấn MySQL?

  3. Danh sách SELECT không nằm trong mệnh đề GROUP BY và chứa cột không được tổng hợp .... không tương thích với sql_mode =only_full_group_by

  4. ghi kết quả của truy vấn sql vào một tệp trong mysql

  5. MYSQL_ROOT_PASSWORD được đặt nhưng bị từ chối Quyền truy cập đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:YES) trong vùng chứa docker