受同一语句

时间:2017-03-23 11:25:04

标签: java sql

我需要帮助在同一个preparedStatement中获取受一系列更新语句影响的行数。

String sql = "update TABLE1 ....; "
            +"update TABLE2 ....; "
            +"update TABLE3 ....; "
            +"insert into TABLE4....; "

PreparedStatement pstmt = BD.conn.prepareStatement(sql);
pstmt.setString(1,x);
.....
pstmt.executeUpdate();

它有效,更新和插入成功,但我无法检查受影响的行。

1 个答案:

答案 0 :(得分:1)

为了获得每个语句的受影响行,您应该a)一次执行一个语句b)使用批量更新。我使用后者是因为它效率更高(我也使用了Statement但你可能会使用PreparedStatement(你必须将它转换为Statement)

    public int[] executeBatchUpdate(List<String> sqlStatements) throws EasyORMException{


    int[] batchResults=null;

    Statement stmt=null; 

    for (int i=0; i<sqlStatements.size();i++){

    try{

   if(stmt==null)    
     stmt = conn.createStatement();

    stmt.addBatch(sqlStatements.get(i));

    }catch(SQLException sqle){     
      //log or throw exception  
    }    
    }//end for loop 

    try {

     batchResults = stmt.executeBatch();

    }catch (SQLException sqle) {

      //log or throw exception

     }    

}

   return batchResults;

}

上面的方法返回一个int值数组(对于每个语句)。请注意,批量更新依赖于JDBC / DB驱动程序,因此,如果出现异常,您可能会看到不同数据库系统的不同行为(https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeBatch())。