• 售前

  • 售后

热门帖子
入门百科

Mysql事件操纵失败怎样办理

[复制链接]
子非鱼JXX 显示全部楼层 发表于 2021-10-25 20:27:51 |阅读模式 打印 上一主题 下一主题
Mysql事务操纵失败怎样办理
事务的原子性 :事务是数据库的逻辑工作单元,事务中包罗的各操纵要么都做,要么都不做 。
要实现事务的原子性,单单靠一条commit或是rollback下令照旧不可的,由于比方commit下令它只是将一个事务中实行成功的DML语句提交给数据库里。如果要实现事务的原子性,则就需要commit和rollback下令共同上步伐上的一个业务逻辑才能可以,具体业务逻辑代码如下示例代码:
1.征象

     步伐中打开了事务举行插入,但是没有commit,表中的数据已经存在,就是回滚也不能删除插入的数据
2.原因

    本表的Storage Engine 为myisam,不是innoDB,不支持事务处置惩罚 rollback()
3.办理方法

    利用 alter table xxxx engine = innoDB ; 将表改为 InnoDB 引擎,效果回滚正常。
4.代码
  1. private void testCrud() {
  2.      Connection conn = null;      //连接对象
  3.      PreparedStatement pstmt = null;  //预编译的SQL语句对象
  4.       try{
  5.         //加载MySQL驱动程序
  6.         Class.forName("com.mysql.jdbc.Driver");
  7.         //连接字符串
  8.         String url = "jdbc:mysql://localhost:3306/test";
  9.         //建立数据库连接
  10.         conn = DriverManager.getConnection(url,"root","");
  11.         //设置事务的隔离级别
  12.         // conn.setTransactionIsolation(Connection. TRANSACTION_REPEATABLE_READ);
  13.         //设置自动提交为false,开始事务
  14.         conn.setAutoCommit(false);
  15.         //带参数的更新语句
  16.         String sql = "INSERT INTO user_info (username ,password ,age )values(?,?,?)";
  17.         //准备语句
  18.         pstmt = conn.prepareStatement(sql);
  19.         //绑定参数,执行更新语句,将张三的账户金额减去1000元
  20.         pstmt.setString(1, "zhangui");
  21.         pstmt.setString(2, "1111");
  22.         pstmt.setInt(3, 300);
  23.         pstmt.execute();
  24.         
  25.         //绑定参数,执行更新语句,将李四的账户金额增加1000元
  26.         // pstmt.setString(1, "zzzzzzzzzzzzzzzzz"); //绑定了非法参数
  27.         //pstmt.setString(2, "1111111111");
  28.         //pstmt.setInt(3, 500);
  29.         //pstmt.execute(); //将抛出SQL异常
  30.         //提交事务
  31.         //conn.commit();
  32.         System.out.println("事务已提交,转账成功!");
  33.         //关闭语句、连接
  34.         pstmt.close(); conn.close();
  35.       }catch(Exception e){
  36.         try{
  37.           conn.rollback();  //回滚事务
  38.           System.out.println("事务回滚成功,没有任何记录被更新!");
  39.         }catch(Exception re){
  40.           System.out.println("回滚事务失败!");
  41.         }
  42.         e.printStackTrace();
  43.       }finally{
  44.         if(pstmt!=null) try{pstmt.close();}catch(Exception ignore){}
  45.         if(conn!=null) try{conn.close();}catch(Exception ignore){}
  46.       }
  47.    
  48.   }
复制代码
感谢阅读,希望能资助到大家,谢谢大家对本站的支持!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作