Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lô JDBC với PreparedStatement không hoạt động trong MySQL

Có vẻ như bạn đang tạo một PreparedStatement tại mỗi lần lặp, vì vậy executeBatch() sẽ chỉ được áp dụng cho PreparedStatement cuối cùng sự vật.

Hơn nữa, PreparedStatement được sử dụng để tránh việc đưa vào SQL và nó xử lý các giá trị thoát ra khi bạn sử dụng ? hệ thống giữ chỗ.

addBatch () phương pháp bạn đang sử dụng có nghĩa là hoạt động với các tham số biến:

, không phải với các truy vấn thô như bạn đã cố gắng làm (đối với điều đó, bạn sẽ sử dụng addBatch(java.lang.String query)

Ví dụ sau sẽ làm những gì bạn muốn:

String[][] data = { { "first", "data" }, { "second", "data" }, { "third", "data" } };

String sql = "insert into abc(col1,col2) values (?, ?)";// use placeholders

PreparedStatement pst = connection.prepareStatement(sql);// create a single statement

for (String[] row : data) {

       // set parameters
       pst.setString(1, row[0]);
       pst.setString(2, row[1]);

       pst.addBatch();// validate the set
}

int[] chkSql = pst.executeBatch(); // execute the batch of commands
//check if chkSql consists of 0..rollback else commit for > 0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. python - _mysql Không thể mở tệp bao gồm:'config-win.h':Không có tệp hoặc thư mục nào như vậy khi cài đặt mysql-python

  2. Không thể xóa hoặc cập nhật hàng mẹ ConstraintViolationException

  3. MySQL trả về giá trị tối đa hoặc null nếu một cột không có giá trị

  4. Tạo hàm thông qua MySQLdb

  5. cách ngăn chặn lỗi này:Cảnh báo:mysql_fetch_assoc () mong đợi tham số 1 là tài nguyên, boolean được cung cấp trong ... trên dòng 11