首页 > 其他分享 >jdbc中事务的处理

jdbc中事务的处理

时间:2023-01-30 21:55:05浏览次数:44  
标签:事务 jdbc 处理 money setString preStatement connection 100 null

/**
 * 模拟账户:Tom账户加钱+100,marry账户减钱-100
 * 开启事务
 */
public class jdbcTransaction {
    public static void main(String[] args) {
        // 不使用事务,进行账户的增加
        Connection connection = null;
        PreparedStatement preStatement = null;

        connection = JDBCUtils.getConnection();
        String reduce = "update account set money = money - ? where name = ?";
        String increase = "update account set money = money + ? where name = ?";
        Savepoint a = null;

        try {
            connection.setAutoCommit(false);
            preStatement = connection.prepareStatement(reduce);
            a = connection.setSavepoint("a");
            preStatement.setString(1,"100");
            preStatement.setString(2,"marry");
            int i = preStatement.executeUpdate();
            System.out.println("marry账户已经扣除了100元");

            i = i / 0;

            preStatement = connection.prepareStatement(increase);
            preStatement.setString(1,"100");
            preStatement.setString(1,"Tom");
            i = preStatement.executeUpdate();
            System.out.println("Tom已经增加了100元");


        } catch (SQLException e) {
            e.printStackTrace();
            try {
                connection.rollback(a);
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }finally {
            JDBCUtils.Close(null,preStatement,connection);
        }
    }
}

重点:

connection.setAutoCommit(false); //开启事务
a = connection.setSavepoint("a"); // 保存断点
connection.rollback(a); // 回滚断点

 

标签:事务,jdbc,处理,money,setString,preStatement,connection,100,null
From: https://www.cnblogs.com/zwgitOne123/p/17077350.html

相关文章

  • .net core 下使用 Kafka 生产者批量发送给消息处理,使用事务(四)
    生产者批量发送消息,使用事务,要么全部失败要么全部成功重要说明事物id必须要设置producerConfig.TransactionalId=Guid.NewGuid().ToString();//必须设置事物id 1......
  • Seata客户端集成及AT&TCC事务模式演示
    0.前言简要说下背景,当前使用seata是基于官方1.5.2版本开发的,所以集成过程可供1.5.2及之后版本的使用者参考,为区别于官方版本,内部版本号设置为1.5.2.2。设计demo演示全局事......
  • 分布式事务解决方案
    事务的具体定义事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、......
  • 分布式事务
    事务的具体定义事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、......
  • 分布式事务(二):基于可靠消息的分布式事务
    项目使用技术springboot、dubbo、zookeeper、定时任务、消息中间件MQ一、项目结构maven父子工程:父工程:consis子工程:api-service、order、product、messageapi-service......
  • ActiveMQ高并发处理方案
    高并发发送消息异常解决方法:现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停            止: javax.jms.JMSException:Couldnotco......
  • flask_migrate---处理 sqlalchemy 数据迁移的工具
    1.什么是flask_migrateflask_migrate是专门用来做sqlalchemy数据迁移的工具,当据模型发生变化的时可将修改后的模型重新映射到数据库中,这意味着数据库也将被修改。本文介......
  • bash字符串处理
    一、计算字符串长度法一${#string} 法二exprlength“${string}”变量字符串中包含空格则要带双引号  二、获取子串某字符在字符串中索引位置expr......
  • EchartsLabel显示的细节处理
    0.缘起照理来说,春节过后的我现在应该还在快乐地摸鱼划水,但小测试猛地发来测试文档和示例,我对了一波之后对其中有个Echarts的label显示超过20截断有了些许冷汗泠泠的感觉......
  • 多个线程下处理事务
     springboot项目都是声明式事务,在多个线程事务处理时,需要我们使用手动事务管理器@ResourceprivatePlatformTransactionManagerplatformTransactionManager;......