在使用准备好的语句(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();
任何帮助将不胜感激。或针对我可以用来获得此结果的方向指出正确的方向。谢谢。
答案 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();
仅发送到数据库一次,并且一次插入所有行,从而节省了对数据库的不必要调用。