Làm cách nào để thực thi SQL sau theo cách có thể mở rộng bằng cách sử dụng JdbcTemplate chạy trên mySQL. Trong trường hợp này, có nghĩa là khả năng mở rộng:Chèn nhiều hàng bằng cách sử dụng JdbcTemplate
- tuyên bố Chỉ có một SQL được thực thi trên máy chủ
- nó hoạt động đối với bất kỳ số lượng hàng.
Đây là tuyên bố:
INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")
Giả sử rằng tôi có một danh sách các POJO với foo
và bar
lĩnh vực. Tôi nhận thấy rằng tôi chỉ có thể lặp qua danh sách và thực hiện:
jdbcTemplate.update("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMap)
nhưng điều đó không hoàn thành tiêu chí đầu tiên.
Tôi tin rằng tôi cũng có thể thực hiện:
jdbcTemplate.batchUpdate("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMapArray)
nhưng từ những gì tôi có thể nói, đó chỉ sẽ biên dịch SQL một lần và thực hiện nó nhiều lần, không những tiêu chí hàng đầu nữa.
Khả năng cuối cùng, dường như vượt qua cả hai tiêu chí, sẽ đơn giản là xây dựng bản thân SQL với StringBuffer
, nhưng tôi muốn tránh điều đó.
Chúng ta có thể làm như vậy chỉ sử dụng JDBC? ? –
Điều này không liên quan gì đến JdbcTemplate, hoặc thậm chí JDBC. Bạn không thể làm điều này trong SQL, khoảng thời gian (hoặc SQL chuẩn), vì vậy bạn chắc chắn không thể làm điều đó trong JdbcTemplate. – skaffman
@skaffman: Tôi đã cập nhật câu hỏi của mình để nói rằng tôi đang sử dụng mySQL. Có lẽ đó là một tính năng chỉ có mySQL, nhưng nó được mô tả tại http://dev.mysql.com/doc/refman/5.1/en/insert.html khoảng một phần tư chiều xuống: "Các câu lệnh INSERT sử dụng cú pháp VALUES có thể chèn Để thực hiện điều này, bao gồm nhiều danh sách các giá trị cột, mỗi danh sách được đặt trong dấu ngoặc đơn và được phân cách bằng dấu phẩy Ví dụ: " –