在Java中如何实现sql的批量提交,我用的时Ibatis要使用事务,并且没50条commit一下

解决方案 »

  1.   


    start transaction
    for (i=0, i < 50, i++) {
       yourDao.updateSth(someObj)
    }
    commit;
      

  2.   

    也可以使用startBatch,你只需要保证你的入参PaginatedList list里面有50条记录就可以
    public class LocalDaoImpl extends SqlMapClientDaoSupport implements LocalDao {    public void insertBuNaTaxBatLst(final PaginatedList list)
        {
             getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
                    public Object doInSqlMapClient(SqlMapExecutor executor)
                            throws SQLException {
                        executor.startBatch();
                        // do some iBatis operations here
                        for(int i=0,count=list.size();i<count;i++)
                        {    
                            executor.insert("insertBuNaTaxBatLst", list.get(i));
                            if (i % 50 == 0) {
                                System.out.println("----" + i);//没有意义只为测试
                            }
                        }
                        executor.executeBatch();
                        return null;
                    }
                });
        }}
      

  3.   

    package dao;import java.sql.Connection;
    import java.sql.SQLException;public class TransactionManager {
    private static ThreadLocal tl = new ThreadLocal();//声明了一个静态容器        //每次操作数据库都用这个方法取得连接,因为这个方法确保了是一个连接对像,所以达到了事务的目的.如果要50次提交一下,那就在servlet里面循环50次后调用此类的静态方法Commit() 即可.
    public static Connection GetConn() throws ClassNotFoundException,
    SQLException {
    Connection conn = (Connection) tl.get();
    if (conn == null) {
    conn = Getconnection.GetConnJDBC();//取得数据JDBC连接
    tl.set(conn);
    conn.setAutoCommit(false);//关键:设置手动提交
    }
    conn.setAutoCommit(false);
    return conn;
    }
     
             //事务提交
    public static void Commit() {
    try {
    TransactionManager.GetConn().commit();
    TransactionManager.GetConn().close();
    tl.set(null);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }         //事务回滚
    public static void RollBack() {
    try {
    TransactionManager.GetConn().rollback();
    TransactionManager.GetConn().close();
    tl.set(null);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    //====================================
    希望对你有帮助