您的位置:首页 > 编程语言

【整理】JDBC事务管理编程实现

2017-04-19 15:08 288 查看
1.PlatformTransactionManager

具体用法如下:(1)实例化需要数据源作参数

                            (2)建立事物的定义,使用DefaultTransactionDefinition类,直接New个新的就可以了

                            (3)调用DefaultTransactionDefinition类的setPropagationBehavior方法,参数是TransactionDefinition的常量,例如PROPAGATION_REQUIRED等。

                            (4)使用具体的SQL操作之前,创建一个TransactionStatus类的实例,def是DefaultTransactionDefinition的实例。

                            (5)正常操作的话,就使用transactionManager.commit(status)。

代码示例:

    JdbcTemplate template = new JdbcTemplate(datasource);

    DataSourceTransactionManager tran = new DataSourceTransactionDefinition();

    DefaultTransactionDefinition def = new DefaultTransactionDefinition();

    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

    TransactionStatus status = tran.getTransaction(def);

    try{

        template.update("insert into userinfo(username,password) values('aaaa','bbbb')");

        template.update("insert into userinfo(username,password) values('cccc','ddd')");

        tran.commit(status);

    }catch(Exception ex){ tran.rollback(status)};

2.TransactionTemplate

具体用法如下:(1)具体的SQL语句操作时,实例化它,TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

                         (2)然后具体的SQL操作,transactionTemplate.execute(new TransactionCallback(){

                                  public Object doInTransaction(TransactionStatus status){ //这里执行SQL操作}  

                            })    

                         (3)如果没有返回值,可以使用TransactionCallbackWithoutResult 类。

代码示例:

    final JdbcTemplate template = new JdbcTemplate(datasource);

    DataSourceTransactionManager tran = new DataSourceTransactionManager(datasource);

    TransactionTemplate trantemplate = new TransactionTemplate(tran);

    trantemplate.execute(new TransactionCallback(){

    public Object doInTransaction(TransactionStatus status){

    int i = 0;

    try{

        template.update("insert into userinfo(username, password) values('jjj','kkk')");

        template.update("insert into userinfo(username, password) values('llll','mmm')");

        i = 1;

    }catch(Exception ex){

        ex.printStackTrace();

       status.setRollbackOnly();

       i=0;

    }

    return new Integer(i);

    }

})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: