如何从电子表格订单项将准备好的语句循环到derby数据库

时间:2019-01-08 14:01:05

标签: java derby

在使用准备好的语句(pst)时,是否可以将重复数据输入到一组数据库字段中?我正在使用Derby数据库。

我有一个从中获取数据的Excel电子表格。每行都有5个输入字段:订单项说明,成本,数量,扩展成本和价格。我只想使用五个条目将其输入derby db,但要在多行中将每行从电子表格中删除五个条目。该数据库具有以下字段:     MATLINEITEM varchar 200     MATLINEITEMCOST varchar 7     MATLINEITEMQTY varchar 7     MATLINEITEMXCOST varchar 7     MATLINEITEMPRICE varchar 7

使用带有“?”方法的标准INSERT,我需要为每行和每个电子表格字段输入一个条目。如果我有10行,那么我将需要50条“ prepared statement”行。我只想使用循环读取每一行以及分配给该行的五个条目,并将其输入数据库。

首先将电子表格中的数据转换为String(使用POI)并分配给TextField。

addSQL = "INSERT INTO MATERIALTBL (MATLINEITEM, MATLINEITEMCOST, 
   MATLINEITEMQTY, MATLINEITEMXCOST, MATLINEITEMPRICE) VALUES (?,?,?,?,?) ";

   pst = conn.prepareStatement(addSQL);

  pst.setString(1,jtxtfld_Item.getText());
  pst.setString(2,jtxtfld_Cost.getText());
  pst.setString(3,jtxtfld_Qty.getText());
  pst.setString(4,jtxtfld_XCost.getText());
  pst.setString(5,jtxtfld_Price.getText());

  pst.executeUpdate();

任何帮助将不胜感激。或针对我可以用来获得此结果的方向指出正确的方向。谢谢。

1 个答案:

答案 0 :(得分:0)

如果要插入多个INSERT语句,则是可能的。

使用addBatch()的{​​{1}}和executeBatch()方法。

您创建一个PrepearedStamement,并向其中添加批次,直到准备好将其插入数据库为止。

示例

PrepearedStatement

为什么要使用批处理?

String addSQL = "INSERT INTO MATERIALTBL (MATLINEITEM, MATLINEITEMCOST, MATLINEITEMQTY, MATLINEITEMXCOST, MATLINEITEMPRICE) VALUES (?,?,?,?,?) "; PreparedStatemen pst = conn.prepareStatement(addSQL); //Set auto-commit to false conn.setAutoCommit(false); for (int i = 0; i < amountOfIterations; i++){ // Set the variables pst.setString(1,jtxtfld_Item.getText()); pst.setString(2,jtxtfld_Cost.getText()); pst.setString(3,jtxtfld_Qty.getText()); pst.setString(4,jtxtfld_XCost.getText()); pst.setString(5,jtxtfld_Price.getText()); // Add it to the batch pst.addBatch(); } //Create an int[] to hold returned values int[] count = stmt.executeBatch(); //Explicitly commit statements to apply changes conn.commit(); 仅发送到数据库一次,并且一次插入所有行,从而节省了对数据库的不必要调用。