首页 > 其他分享 >2022-8-19第一组孙乃宇JDBC学习2

2022-8-19第一组孙乃宇JDBC学习2

时间:2022-08-19 20:33:46浏览次数:57  
标签:事务 JDBC 19 数据库 2022 sql null conn pstmt

JDBC的学习

Statement的不足:

  1. 大量的字符串拼接,代码可读性降低。

  2. sql注入

SQL注入:BUG通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断。如 login("zxcvzxcvzxcv","b' or '1' = '1");

PreparedStatement

预编译(预加载)接口

  1. 通过conn获取的对象

  2. 是Statement接口的子接口

  3. sql语句中可以传参。用?占位,通过setXXX方法来给?赋值

  4. 提高性能

  5. 避免sql注入

 @Test
   public void test03() {
       Connection conn = null;
       PreparedStatement pstmt = null;
       ResultSet rs = null;
       try {
           conn = JDBCUtil.getConnection();
           String sql = "select * from user where username = ? and password = ?";//使用?占位,后面再给?赋值
           pstmt = conn.prepareStatement(sql);
           pstmt.setString(1,"aaa");
           pstmt.setString(2,"b' or '1' = '1");
           rs = pstmt.executeQuery();
           if(rs.next()) {
               System.out.println("登录成功...");
          }else {
               System.out.println("账号或密码错误...");
          }
      } catch (ClassNotFoundException e) {
           throw new RuntimeException(e);
      } catch (SQLException e) {
           throw new RuntimeException(e);
      } catch (IOException e) {
           throw new RuntimeException(e);
      } finally {
           JDBCUtil.close(conn,pstmt,rs);
      }
  }

数据库事务

数据库事务:是数据库的特性

Mysql的数据库引擎

  1. 在MySQL中,只有使用了Innodb引擎的数据库才支持事务

  2. 事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,要么全部不执行。

  1. 发生在DML中,增删改。

事务的四大特征ACID

  1. 原子性 A。  一个事务,要么全部完成,要么全部不完成。

  2. 一致性 C。  在事务开始之前和事务结束之后,数据库的完整性没有被破坏。

  3. 隔离性 Isolation  数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。

  4. 持久性 D  事务结束以后,对数据的增删改是永久性的。

术语:提交事务,回滚事务(事务回滚)

注意:

  1. 事务一旦提交,就不可能回滚。

  2. 当一个连接对象被创建时,默认情况下自动提交事务。

  3. 关闭连接时,数据会自动提交事务。

操作事务的步骤:

1、关闭事务的自动提交:当做出增删改操作,把变化发生在内存中,提交事务,才会真正提交给数据库。

@Test
   public void test01() {
       Connection conn = null;
       PreparedStatement pstmt1 = null;
       PreparedStatement pstmt2 = null;
       try {
           conn = JDBCUtil.getConnection();//工具类创建连接对象
           // 关闭事务的自动提交
           // true:开启(默认) false:关闭
           // 开启一个事务
           conn.setAutoCommit(false);
           // 把id为1的账户余额-1000
           String sql1 = "update bank set balance = balance - 1000 where id = 1";
           pstmt1 = conn.prepareStatement(sql1);
           pstmt1.executeUpdate();
           String sql2 = "update bank set balance = balance + 1000 where id = 2";
           pstmt2 = conn.prepareStatement(sql2);
           pstmt2.executeUpdate();
           int i = 10 / 0;
           // 提交事务
           conn.commit();
           System.out.println("转账成功...");
      } catch (Exception e) {
           try {
               // 出现异常事务回滚
               conn.rollback();
          } catch (SQLException ex) {
               throw new RuntimeException(ex);
          }
           throw new RuntimeException(e);
      } finally {
           JDBCUtil.close(conn,pstmt1);
           JDBCUtil.close(null,pstmt2);
      }
  }
 

标签:事务,JDBC,19,数据库,2022,sql,null,conn,pstmt
From: https://www.cnblogs.com/sunnaiyu/p/16603252.html

相关文章

  • 2022-08-19 第四组 王佳齐 学习笔记
    思维导图学习笔记PreparedStatement:预编译(预加载)接口2.事务处理可以用来维护数据的完整性。保证sql语句要么全执行,要么全部不执行。1.通过conn获取的对象2.是Stateme......
  • 2022-08-19 记录一下 奥睿科 2.5/3.5英寸双盘位USB3.0硬盘底座 使用感受
    什么?电脑识别不了硬盘???我把京东客服给骂了,再到我写这个随笔的时候,有点心疼那个京东客服。为了扩容,昨天入手了希捷的2t机械家用盘,以及这次的主角奥睿科硬盘底座,简称硬盘盒......
  • 8.19总结
    啊~,本周的第一个暴零所罗门王的宝藏\(solution\)第一眼的时候完全没有想到是图论,当然暴零不是这个原因把行和列进行连边,因为行i的旋转次数+列j的旋转次数一定等于\(c_{......
  • 2022-08-19 田龙跃 JAVAWEB项目(小论坛)
    JAVA小项目E-R图个人理解:E-R图中每个实体到我们对java中就是一个domin类,字段就是属性流程图注册流程图登录流程图JSTL标签jstl表达式:表达式的用法也是见名知义(和......
  • 2022暑假集训总结
    2022暑假集训总结收获做了██道题跟着多校联训学的时候,主要收获是学会了一些基本的暴力算法和一些以前不知道的算法概念后来高烧休息了几天回来以后主要的收获是考试......
  • 2022-08-19 第四小组 王星苹 学习笔记
    学习心得PreparedStatement,预编译(预加载)接口1.通过conn获取的对象2.是Statement接口的子接口3.sql语句中可以传参,用?来占位,通过setxxx方法给?赋值4.提高......
  • CF1196D2 RGB Substring (hard version)
    https://www.luogu.com.cn/problem/CF1196D2前缀和黄色题思路:看当前输入要被修改的这个字符串的第i位,是否与'R','G','B'三个中的一个相等,不相等的另外两个则增加一次修......
  • 【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率
    简介: 近日,关于机器学习访存密集计算编译优化框架的论文《AStitch:EnablingANewMulti-DimensionalOptimizationSpaceforMemory-IntensiveMLTrainingandInferen......
  • Tableau Desktop 2019 for Mac(数据可视化分析)中文版
    TableauDesktop2019forMac是一款方便实用,功能强大的数据可视化分析软件。Tableau利用技术优势,能够将数据图片转化为数据库查询,利用视觉观察图案的天赋能力,识别趋势,在......
  • 2022伊朗数学奥林匹克 第二轮 第二天 第四题
    给定一个n*n的方格表,其中有部分方格染黑色,剩余方格染白色(可以不存在白格).对于甲每次操作,可以选取一恰有一个黑格的行,并将该黑格所在列上的所有方格染成红色;对于......