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. –
Đó 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