Có thể lấy danh tính @@ từ chèn SQL vào một cuộc gọi mẫu jdbc Spring không? Nếu vậy, làm thế nào?nhận dạng từ chèn sql qua jdbctemplate
Trả lời
Phương thức JDBCTemplate.update
bị quá tải để lấy đối tượng được gọi là GeneratedKeyHolder mà bạn có thể sử dụng để truy xuất khóa được tạo tự động. Ví dụ (mã lấy từ here):
final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps =
connection.prepareStatement(INSERT_SQL, new String[] {"id"});
ps.setString(1, name);
return ps;
}
},
keyHolder);
// keyHolder.getKey() now contains the generated key
Làm thế nào về SimpleJdbcInsert.executeAndReturnKey?
Wow, tôi đã không thực sự biết về lớp đó - kinda gọn gàng. Cảm ơn. +1 – javamonkey79
Tôi thích phiên bản này hơn phiên bản với PreparedStatementCreator. – ruslanys
Thêm ghi chú chi tiết/mẫu mã để todd.pierzina trả lời
jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
"Primary_key");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("Column_NAME1", bean.getval1());
parameters.put("Column_NAME2", bean.getval2());
// execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
parameters));
// convert Number to Int using ((Number) key).intValue()
return ((Number) key).intValue();
Tôi đang đối mặt với ngoại lệ này: org.springframework.dao.InvalidDataAccessResourceUsageException: Tính năng getGeneratedKeys không được hỗ trợ bởi cơ sở dữ liệu này –
@ Az.MaYo - Vấn đề của bạn có thể liên quan đến phiên bản trình điều khiển JDBC. –
- 1. Spring JdbcTemplate không thể lấy ID chèn từ MySQL
- 2. nhận DateTime từ ResultSet trong JdbcTemplate
- 3. Chèn nhiều hàng bằng cách sử dụng JdbcTemplate
- 4. Nhận dạng nhiều lần chèn trong máy chủ sql 2008
- 5. JdbcTemplate: truy cập trường MySQL VARBINARY dưới dạng Chuỗi
- 6. Lấy khóa nhận dạng tự động sau khi chèn qua EF
- 7. chèn BLOB qua tập lệnh sql?
- 8. Làm cách nào để tạo danh sách sql "in (...)" động thông qua Spring JdbcTemplate?
- 9. Sql Server trả về giá trị của cột nhận dạng sau khi chèn câu lệnh
- 10. Làm cách nào để chèn nhiều bản ghi và nhận giá trị nhận dạng?
- 11. Lập tức một JdbcTemplate từ một java.sql.Connection
- 12. Tạo nhận dạng SQL làm khóa chính?
- 13. Nhận dạng giọng nói qua cổng USB
- 14. Thiết nhận dạng để bật hoặc tắt trong SQL server
- 15. Sql chèn tốc độ lên
- 16. java sql chèn
- 17. JdbcTemplate và SimpleJdbcTemplate
- 18. Nhận giá trị cột nhận dạng khi INSERT
- 19. Chèn ảnh trong nhận xét mã qua Emacs
- 20. sử dụng Spring JdbcTemplate - tiêm nguồn dữ liệu vs JdbcTemplate
- 21. iSeries DB2 - Có cách nào để chọn giá trị nhận dạng từ một câu lệnh chèn không?
- 22. Chèn Microsoft SQL Server từ truy vấn chọn
- 23. Cách chèn các giá trị vào cột nhận dạng tự động trong MYSQL
- 24. spring jdbcTemplate cách bắt ngoại lệ?
- 25. Định dạng ngày SQL Server từ chuỗi
- 26. Làm thế nào để vượt qua nhiều tham số được đặt tên cho Spring JdbcTemplate?
- 27. NamedParameterJdbcTemplate vs JdbcTemplate
- 28. JPA vs Spring JdbcTemplate
- 29. Chèn nhiều SQL hiệu quả
- 30. Chèn SQL chọn @@ Identity
Đó sẽ là "một lớp lót" mà tôi đang tìm kiếm ở đây. Tốt đẹp. Điều đáng buồn là tôi đã nhìn thấy liên kết nhưng đã vượt qua nó do điều này: "một phần của tiêu chuẩn JDBC 3.0". (Tôi không nghĩ rằng chúng tôi sử dụng JDBC 3.0, nhưng tôi cũng không nghĩ rằng điều này là có liên quan). – javamonkey79
Nó nhận được một lớp lót thực sự trong Java 8 với lambdas \ m/ – fabwu