java - 如何将准备好的语句从电子表格行项目循环到 derby 数据库

标签 java derby

有没有办法在使用准备好的语句(pst)时将重复数据输入到一组数据库字段中?我正在使用 Derby DB。

我有一个 Excel 电子表格,可以从中获取数据。每行有 5 个输入字段:行项目描述、成本、数量、扩展成本和价格。我想仅使用五个条目将其输入到 Derby 数据库中,但有多行,每行有电子表格中的五个条目。数据库有以下字段: MATLINEITEM varchar 200 MATLINEITEMCOST varchar 7 MATLINEITEMQTY varchar 7 MATLINEITEMXCOST varchar 7 MATLINEITEMPRICE varchar 7

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

电子表格中的数据首先转换为字符串(使用 POI)并分配给文本字段。

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();

如有任何帮助,我们将不胜感激。或者为我指出正确的方向,告诉我可以使用什么来获得这个结果。谢谢。

最佳答案

如果您想插入多个 INSERT 语句,这是可能的。

使用PrepearedStamementaddBatch()executeBatch()方法。

您创建一个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();

为什么要使用批处理?

这个PrepearedStatement将只发送到数据库一次,并且会一次插入所有行,从而节省对数据库的不必要的调用。

关于java - 如何将准备好的语句从电子表格行项目循环到 derby 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093444/

相关文章:

spring-boot - 升级到Apache Derby 10.15后,Spring Boot应用程序中断-为什么?

derby - 如何设置ROO以将derby客户端驱动程序与DBRE插件一起使用?

java - java 中的多线程和异常处理的责任链

java - 如何在 HTML(Thymeleaf、Spring、Java)中调用方法?

JAVA、SQL、插入不重复

java - 错误消息声称我的表名实际上是 Java Derby (SQL) 中的列

Java代码生成

java - 为什么我在运行时会出现此方法不一致的情况

java - 解决java嵌入式SQL数据库中的排他关系

java - 在 java 中需要一个小型且简单的嵌入式数据库 : SQLJet vs. JavaDB/Apache Derby