有没有办法在使用准备好的语句(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 语句,这是可能的。
使用PrepearedStamement
的addBatch()
和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/