Java 循环中的PreparedStatement,如何使用
我正在尝试存储在Java 循环中的PreparedStatement,如何使用,java,loops,prepared-statement,derby,javadb,Java,Loops,Prepared Statement,Derby,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,
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();
}
PreparedStatement stm=null;
//String sql=“插入项(ID、类型、TITEL、UITGELEEND)值(“%s”、“s”、“s”、“b)”;
试一试{
stm=db.prepareStatement(“插入项目(ID、类型、滴度、UITGELEEND)值(?,?,?)”;
对于(int n=0;n
或者我需要在循环中包含
executeUpdate()
?以及准备好的报表
?或者我需要执行executeBatch()
?您需要为列表中的每个项目调用executeUpdate
,因此它需要在循环中。您只需要准备一次语句,这样就应该在循环之外
因此:
试试看{
stm=db.prepareStatement(“插入项目(ID、类型、滴度、UITGELEEND)值(?,?,?)”;
对于(int n=0;n
您需要为列表中的每个项目调用executeUpdate
,因此它需要在循环中。您只需要准备一次语句,这样就应该在循环之外
因此:
试试看{
stm=db.prepareStatement(“插入项目(ID、类型、滴度、UITGELEEND)值(?,?,?)”;
对于(int n=0;n
在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();
stm=db.prepareStatement(“插入项目(ID、类型、滴度、UITGelend)值(?,?,?)”;
db.setAutoCommit(假);
对于(int n=0;n
在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();
stm=db.prepareStatement(“插入项目(ID、类型、滴度、UITGelend)值(?,?,?)”;
db.setAutoCommit(假);
对于(int n=0;n
另一种可能是使用addBatch/executeBatch,在这种情况下,在循环内调用addBatch,然后在循环外调用executeBatch。不过,在我自己的程序中,我倾向于做您所做的事情,将executeUpdate放入循环中。最后,还有一个问题是何时执行事务提交。另一种可能是使用addBatch/executeBatch,在这种情况下,在循环内调用addBatch,然后在循环外调用executeBatch。不过,在我自己的程序中,我倾向于做您所做的事情,将executeUpdate放入循环中。最后,还有一个问题是何时执行事务提交。为什么要使用commit()?我以前使用过executeBatch(),它在没有提交的情况下工作。最好在开始准备好的语句之前先禁用自动提交。然后在完成所有操作后,您应该提交事务。请参阅页面的自动提交部分:为什么提交()?我以前使用过executeBatch(),它在没有提交的情况下工作。最好在开始准备好的语句之前先禁用自动提交。然后,在完成所有操作后,您应该提交事务。请参阅页面的自动提交部分: