java实现数据库事物的处理

   以前很不理解回滚这个东西,现在突然明白了,通过这个例子

   通过一个dao 和一个service层来实现

    创建数据库

    create table money(name varchar(20),qian int(20));

    insert into money(name,qian)values('zs',1000);

    insert into money(name,qian)values('ls',1000);

    Dao层实现转账功能  类名: AccountDao

    因为一个事物 只能通过一个Connection 对象,所以我们这儿将Connection 作为一个参数传进

    public void zhuanzhang(Connection conn,String name,int qian){

        String sql = "update money set qian =qian+? where name=?"

       PrepareStatement pro = conn.prepareStatement(sql);

        pro.setInt(1,qian);

        pro.setString(2,name);

        int index = pro.executeUpdate();

    /*这儿如果出错,那么返回的结果是一个0,求大神写下更简单的方法,我在这儿抛出一个异常

        在service 层可以捕获到

    */

       if(index==0){

            throw new RuntimeException("错误");

           }

    }


我在service层开始实现代码 类名:AccuntService

public void shixian(String from,String to,int qian){

    Connection conn = null;

    try{

        conn=Jdbcutil.getConnection();//自己写的工具。

//开始事物

        conn.setAutoCommit(false);//autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式 

        AccountDao  accd = new AccountDao();

        accd.zhuanzhang(from,qian);

        accd,zhuanzhuang(to,qian);

        conn.commit();

        conn.close();

    }catch(Exception e){

        try{

            conn.rollback();//捕获异常,事物回滚。

        }catch(SqlException e){

            e.pran...();

    }

}    

}


//测试类 测试一下

@Test

pubic void fun1(){

        AccuntService as = new AccuntService();

        as.shixian('zs','ls',100);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 语言中,可以使用 JDBC API 来实现数据库事务的操作。以下是一个基本的事务操作代码示例: ``` Connection conn = null; try { // 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 开始事务 conn.setAutoCommit(false); // 执行数据库操作 // ... // 提交事务 conn.commit(); } catch (SQLException e) { // 回滚事务 try { if (conn != null) { conn.rollback(); } } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { // 关闭数据库连接 try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } ``` 在上述代码中,首先通过 `DriverManager.getConnection()` 方法获取数据库连接,然后将连接的自动提交模式设置为 `false`,即开启事务模式。接着执行数据库操作,如果操作成功,则调用 `commit()` 方法提交事务,否则调用 `rollback()` 方法回滚事务。最后,无论事务是否成功,都需要关闭数据库连接。 需要注意的是,在事务中执行的所有 SQL 语句必须使用同一个数据库连接对象,并且必须在同一个事务中执行。否则,将无法保证事务的一致性和完整性。 另外,还可以使用 Spring 框架来管理事务。Spring 提供了一个事务管理器(TransactionManager)来管理事务,可以方便地进行事务的开启、提交、回滚等操作。需要在 Spring 配置文件中配置事务管理器和数据源,然后在需要进行事务操作的方法上添加 `@Transactional` 注解即可。这种方式比较方便,也更加灵活和可扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值