是否可以使用PreparedStatement在Oracle上插入多个表?

时间:2015-06-15 09:18:06

标签: java oracle

我尝试了一些代码插入到oracle多个表中。但它没有执行。 任何人都可以帮助我吗?

这是我的代码:

String sql = "insert all"
                + "into t_stock_purchase values(?,?,?,?)"
                + "into t_stocks values(?,?,?)"
                + "into  t_stock_status(godownname,itemname,receivedfrom,receiveddate,receivedqty,availablebal) values(?,?,?,?,?,?)"
                + "select 1 from dual";

ps = con.prepareStatement(sql);
int rowCount = PurchaseTable.getRowCount();

System.out.println("Row Count = "+rowCount);

for (int i = 0; i < rowCount; i++) {
ps.setString(1, partyNameLable);
ps.setString(2, dateLable);
ps.setString(3, (String) PurchaseTable.getValueAt(i, 0));
ps.setInt(4, (int) PurchaseTable.getValueAt(i, 1));
ps.setString(5, "Purchase");
ps.setString(6, (String) PurchaseTable.getValueAt(i, 0));
ps.setInt(7, (int) PurchaseTable.getValueAt(i, 1));
ps.setString(8, "Purchase");
ps.setString(9, (String) PurchaseTable.getValueAt(i, 0));
ps.setString(10, partyNameLable);
ps.setString(11, dateLable);
ps.setInt(12, (int) PurchaseTable.getValueAt(i, 1));
ps.setInt(13, (int) PurchaseTable.getValueAt(i, 1));
ps.execute();
}

这是正确的方法吗?如果有可能请提供给我。

先谢谢。

2 个答案:

答案 0 :(得分:0)

您通过连接字符串来构建SQL语句,但是不要在子句之间留下空格;所以你最终得到的insert allinto t_stoc...无效。您在第二个子句中也有重复的into

你说你没有收到任何错误,所以你可能会在代码后面压制它们。您应该仔细研究为什么您没有看到任何异常,因为该语句无效。

在每个添加的字符串的开头添加一个空格,至少在语法有效的地方:

String sql = "insert all"
            + " into t_stock_purchase values(?,?,?,?)"
            + " into t_stocks values(?,?,?)"
            + " into t_stock_status(godownname,itemname,receivedfrom,"
            + "receiveddate,receivedqty,availablebal) values(?,?,?,?,?,?)"
            + " select 1 from dual";

...或者如果您愿意,可以在每个字符串的末尾。

更好的做法是为所有插入指定列名,即使您在每列中插入值 - 它更清晰,并且更容易发现排序中的错误。

答案 1 :(得分:0)

可能是查询语法错误,请在第三行删除into,请查看以下内容

 String sql = "insert all"
            + " into t_stock_purchase(col1,col2,col3,col4) values(?,?,?,?)"
            + " into t_stocks(col1,col2,col3) values(?,?,?)"
            + " into t_stock_status(godownname,itemname,receivedfrom,receiveddate,receivedqty,availablebal) values(?,?,?,?,?,?)"
            + " select 1 from dual";