Ear*_*ind 4 java loops derby prepared-statement javadb
我正在尝试存储表中创建的所有项目ITEM,我想知道是否可以这样做:
PreparedStatement stm = null;
//String sql = "INSERT INTO ITEM (ID, TYPE, TITEL, UITGELEEND) VALUES ('%s', '%s', '%s', %b)";
try {
stm = db.prepareStatement("INSERT INTO ITEM (ID, TYPE, TITEL, UITGELEEND) VALUES (?, ?, ?, ?)");
for (int n = 0; n < ItemLijst.getItems().size(); n++) {
Item huidigItem = ItemLijst.getItemObvIdx(n);
stm.setString(1, huidigItem.getID().toString());
stm.setString(2, huidigItem.getType().toString());
stm.setString(3, huidigItem.getTitel());
stm.setString(4, String.valueOf(huidigItem.isUitgeleend()));
}
stm.executeUpdate();
stm.close();
} catch (SQLException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
或者我需要将其包含executeUpdate()在循环中吗?还有PreparedStatement?或者我需要做一个吗executeBatch()?
在 for 循环内运行查询并不是最佳实践。最好使用批量更新,如下所示:
stm = db.prepareStatement("INSERT INTO ITEM (ID, TYPE, TITEL, UITGELEEND) VALUES (?, ?, ?, ?)");
db.setAutoCommit(false);
for (int n = 0; n < ItemLijst.getItems().size(); n++) {
Item huidigItem = ItemLijst.getItemObvIdx(n);
stm.setString(1, huidigItem.getID().toString());
stm.setString(2, huidigItem.getType().toString());
stm.setString(3, huidigItem.getTitel());
stm.setString(4,String.valueOf(huidigItem.isUitgeleend()));
stm.addBatch();
}
stm.executeBatch();
db.commit();
Run Code Online (Sandbox Code Playgroud)