2011-02-04 23 views

Trả lời

19

Không cần sử dụng SQL cụ thể DBMS cho điều đó.

Đó là những gì getGeneratedKeys() dành cho.

Khi preparing your statement bạn vượt qua tên (s) của các cột tự động tạo ra mà sau đó bạn có thể lấy sử dụng getGeneratedKeys()

 
PreparedStatement pstmt = connection.prepareStatement(
    "insert into some_table (col1, col2, ..) values (....)", 
     new String[] { "ID_COLUMN"}); 

pstmt.executeUpdate(); 

ResultSet rs = pstmt.getGeneratedKeys(); // will return the ID in ID_COLUMN 

+0

Tôi chỉ muốn xác nhận điều này, nghĩ mình chắc chắn 99%, sẽ này vẫn trả về giá trị cột được tạo tự động dự định ngay cả khi nhiều câu lệnh chèn đã được thực thi trong thời gian giữa chèn và lấy giá trị cột bằng cách sử dụng 'getGeneratedKeys()'? –

2

Bạn có thể nhận được những gì bạn đang tìm kiếm bằng cách sử dụng hàm IDENTITY_VAL_LOCAL. (Derby Reference)

Chức năng này được cho là trả về "giá trị được gán gần đây nhất của cột nhận dạng cho kết nối, trong đó việc chuyển nhượng xảy ra do kết quả của một câu lệnh INSERT hàng đơn sử dụng mệnh đề VALUES."

Cần lưu ý rằng hàm này sẽ trả về DECIMAL (31,0), bất kể loại dữ liệu thực tế của cột nhận dạng tương ứng.

Ngoài ra, chỉ chỉ hoạt động đối với các chèn hàng đơn chứa mệnh đề VALUES.

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