一个多表Java的预备声明

时间:2013-03-07 16:14:03

标签: java sql prepared-statement

1)我可以使用一个预准备语句将数据传递给java中的多个表吗?我正在使用JDBC驱动程序。

try
        {
            conn = ac.getConnection();
            String insert = "INSERT INTO PPN_WORKFLOW(C2_F_Date,C2_Completed) VALUES(?,?)";
            stmt = conn.prepareStatement(insert);
            stmt.setDate(1, date);//question 2
            stmt.setInt(2, 1);
            stmt.executeUpdate();
            stmt.close();
            String insert2 = "INSERT INTO CREATE_ERF(Purc_Part_New_F_Date,Purc_Part_New_Completed) "
                    + "VALUES(?,?)";
            stmt = conn.prepareStatement(insert2);
            stmt.setDate(1, date);
            stmt.setInt(2,1);
            stmt.executeUpdate();
        }
        catch(SQLException | ClassNotFoundException e) {e.printStackTrace();}
        finally
        {
            if(stmt != null) {
                stmt.close();
            }

            if(conn != null) {
                conn.close();
            }
        }

这里我对表PPN_WORKFLOW和CREATE_ERF使用stmt(PreparedStatement)?

2)PPN_WORKFLOW表由更多的参数组成,如

PPN_WORKFLOW(C1_S_Date,C2_F_Date,C2_Completed)

但我想更新2和3参数,那么我的代码是否正确。

2 个答案:

答案 0 :(得分:3)

String insert = "INSERT INTO PPN_WORKFLOW(C2_F_Date,C2_Completed) VALUES(?,?)";
stmt = conn.prepareStatement(insert);

像工厂方法一样看prepareStatement()。它在给定输入的情况下返回处于特定状态的对象。此时,您传递给它的输入是INSERT语句。

尝试为同一个目的重用同一个对象没有意义,因为该方法返回了一个为您提供的参数定制的对象,insert。您需要根据不同的目的创建另一个对象。这是你在代码中做的。

答案 1 :(得分:1)

如果第二个使用try while ... try{ //insert to first table ///while true try{ //insert to second table }finally{ } }finally{ //close resources } ....

,则每次向每个表插入值
{{1}}