public boolean insert(String sql, Object... args) throws SQLException,
ClassNotFoundException {
PreparedStatement pstmt = getConn().prepareStatement(sql);
for (int i = 0; i < args.length; i++)
pstmt.setObject(i + 1, args[i]); if (pstmt.executeUpdate() != 1)
return false;
return true;
}
可以执行几个这样的方法,在提交事物吗?
也就是几个insert组成一个事物。
求解释。

解决方案 »

  1.   

    这样的方法不行,必须来自一个连接,并且在刚获取连接时取消自动提交并启动事务。最后完毕时调用commit(),如果失败了则调用rollback();
      

  2.   

    类似这样:Connection conn = getConn();
    try { 
      conn.setAutoCommit(false); //设置不会自动提交,也即后续操作将保持在一个事务内
      insert(conn, "SQL1"); // 可以调用函数多次
      insert(conn, "SQL2");
      ...
      conn.commit(); //提交事务 
    } catch(Exception e) { 
      conn.rollback(); // 操作不成功,回滚事务 
      e.printStackTrace();
    } finally {
      conn.close(); 
    }
      

  3.   

    多次调用insert倒是可以,只是批量插入的时候最好用批量插入的方法executeBatch,而不是多次执行insert操作。