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.