2013-07-03 26 views
15

Tôi có một PreparedStatement như:Chèn bằng PreparedStatement. Làm cách nào để tự động tăng ID?

PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (id, time, name" + "(?,?,?)",Statement.RETURN_GENERATED_KEYS); 
ResultSet tableKeys = preparedStatement.getGeneratedKeys(); 
preparedStatement.executeUpdate(); 
tableKeys.next(); 
int autoGeneratedID = tableKeys.getInt(1); 
preparedStatement.setInt(1,autoGeneratedID); 
preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));       
preparedStatement.setString(3, "Test"); 
preparedStatement.executeUpdate(); 

Như bạn có thể thấy, bảng Employee có một ID tự động tăng lên. Tôi cần phải tự động thêm nó một cách tự động bằng cách sử dụng chuẩn bị sẵn sàng. Ai đó có thể cho tôi biết tôi đang đi sai và sửa tôi không? Ngay bây giờ nó chỉ cho tôi một lỗi liên quan đến Tuyên bố.

Trả lời

27

Rời khỏi cột ra khỏi tuyên bố INSERThoàn toàn. Nó sẽ được tạo ra bởi cơ sở dữ liệu. Truy vấn của bạn phải là:

INSERT INTO employee (time, name) 
VALUES (?, ?) 

Thứ hai, bạn phải thực hiện thao tác chèn đầu tiên, sau đó lấy khóa ra khỏi kết quả.

Tôi tin rằng mã của bạn nên là:

PreparedStatement preparedStatement = 
    connect.prepareStatement("INSERT into employee (time, name) VALUES (?,?)", 
    Statement.RETURN_GENERATED_KEYS); 

preparedStatement.setTimestamp(1, 
    new java.sql.Timestamp(new java.util.Date().getTime()));       
preparedStatement.setString(2, "Test"); 

preparedStatement.executeUpdate(); 

ResultSet tableKeys = preparedStatement.getGeneratedKeys(); 
tableKeys.next(); 
int autoGeneratedID = tableKeys.getInt(1); 

Note ví dụ này không kiểm tra sự thành công của báo cáo kết quả thực hiện hoặc sự tồn tại của các phím trở lại.

+0

Cảm ơn rất nhiều !!! –

+0

chúng ta có thể sử dụng điều này? 'chèn vào các giá trị mytbl (str1, str2) ('Example',?)' và sau đó 'ps.setString (1," String2 ")' hoặc chúng ta phải sử dụng 'ps.setString (2," String2 ")'? :) – DeepSidhu1313

+0

@ DeepSidhu1313 Tất nhiên bạn có thể thử nó, nhưng nó sẽ là tham số 1 vì nó là tham số đầu tiên trong truy vấn. –

Các vấn đề liên quan