首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

spring+DbUtils开发事务如何控制呢

2013-12-19 
spring+DbUtils开发事务怎么控制呢?如题:项目中用spring3-mvc+DbUtils spring+DbUtils开发事务怎么控制呢?

spring+DbUtils开发事务怎么控制呢?
如题:
项目中用spring3-mvc+DbUtils spring+DbUtils开发事务怎么控制呢?
public int updateTransaction(String [] sqlArr,Object [] sqlParamsArr){
     int affectedRows = 0;
    
     if (sqlArr.length != sqlParamsArr.length) {
     logger.error("updateTransaction error:sql tasks not equal param tasks!");
     return affectedRows;
     }
     if (sqlArr.length == 0){
     return affectedRows;
     }
     Connection con = null;
     try {
     con = dataSource.getConnection();
     con.setAutoCommit(false);
     queryRunner = new QueryRunner(dataSource); 
     for (int i = 0 ; i < sqlArr.length ; i++) {
     String sql = sqlArr[i];
     Object[] params = (Object[])sqlParamsArr[i];
     if (params == null) { 
                 affectedRows += queryRunner.update(sql); 
             } else { 
                 affectedRows += queryRunner.update(sql, params); 
             } 
     }
         } catch (SQLException e) { 
            logger.error("updateTransaction error:Error occured while attempting to updateTransaction data!", e);
         affectedRows = 0;
        try {
        logger.error("updateTransaction info:transaction roll back!");
con.rollback();

} catch (SQLException e1) {
logger.error("updateTransaction error:Error occured while updateTransaction do rollback()!");

}
         return affectedRows; 
         } 
        try {
        logger.error("updateTransaction info:transaction commit!");
con.commit();
} catch (SQLException e) {
logger.error("updateTransaction error:Error occured while updateTransaction do commit()!");
 affectedRows = 0;
}
         return affectedRows; 
    }
我这样写事务 ,还是没有效果!痛苦。
不胜感激!
[解决办法]
queryRunner有个batch(java.lang.String sql, java.lang.Object[][] params)方法,
开源社区的API文档
http://www.oschina.net/home/apidoc?api=commons-dbutils-1.1
LZ自己去看下吧!
这么好的组件肯定会提供事物处理的啊,多看API文档.................
[解决办法]
刚去做了测试,有事物控制,
不过需要用这个方法
batch(Connection conn,java.lang.String sql, java.lang.Object[][] params)
传入一个conn,
在此不需要手动设置自动提交,一个conn是一个事物;
QueryRunner queryRunner = new QueryRunner(true);
Connection conn = null;
conn = DataAccess.getConnection();
queryRunner.batch(conn,"insert into SYS_USER(userid,username) values(?,?)",new String[][]{new String[]{"test1","测试1"},new String[]{"test2222222222222222222222222222222","测试2"}});
其中第一条数据符合条件,但是第二条数据过长,数据库报错, 事物自动滚回,第一条数据也没有插入到数据库,
LZ,不知道你是不是要这种事物控制
[解决办法]
时隔一年,不知道楼主有没有解决?
[解决办法]
怎么解决的呢?

热点排行