1. JDBC

JDBC规范(掌握四个核心对象,都在java.sql下):

  • DriverManager:用于注册驱动

  • Connection: 建立与数据库的连接

  • Statement: 操作数据库sql语句的对象

  • ResultSet: 结果集或一张虚拟表

  • 操作步骤:

    • 在idea中导入mysql驱动包

    • 在java程序中注册mysql驱动

      • Class.forName(“驱动包”)

        • 加载(注册)后的数据驱动,会同意由DriverManager类来管理

        • 此代码一般书写在静态代码块里

    • 使用jdbc中的常用API对象,进行数据库连接

      • 数据库的链接需要通过DriverManager类来调用驱动,实现和数据库的链接,连接成功返回Connect对象

      • String url = "jdbc:mysql://localhost:3306/"

      • Connection condb = DriverManager.getConnecction(url[ip,port],username,password)

    • 使用JDBC常用API对象,操作数据库中的表(使用mysql语句)

      • String sql = “select * from table_name” //insert update delete

      • 使用Statement来进行数据库操作

      • Statement stmt = condb.createStatement();

      • 执行sql查询

        • ResultSet rs = stmt.executeQuery(“select * from table_name”)

        • 从获取的结果集向下移动一行,并判断是否有记录存在

          • rs.next()

          • while(rs.next)
            {
                rs.getInt("cid");//从结果集取出int类型的字段
                rs.getIng("age");
                rs.getStrinh("cname");
                rs.getInt(1);//根据指定的索引获取表中相应的字段下的数据(数据表中的索引从1开始)
            }
            
    • 接收数据库表后的结果

      • 查询的结果集(执行了select语句之后,会生成一张临时的虚拟表)

    • 释放资源

      • rs.close()

      • stmt.close()

      • conndb.close()

1.1. 预处理对象

jdb针对SQL注入问题,提供一个预处理对象,java.sql.PreparedStatement

  • 使用

        PrepaerdStatement pstmt = conndb.preparedStatement(String sql)
        在jdbc中针对预编译的sql语句,可以使用占位符:? , 来表示要添加的参数
        String sql = "select * from 表名 where id = ? and name=?";
        //可以使用preparedStatement给占位符传递参数?
        pstmt.setInt(占位符序号,传递的具数据) //占位符从1开始
        pstmt.setString(2,"张三")
      
        //执行
        pstmt.ecexuteQuery(); //五参数
    

1.2. 连接池

存放多个连接的集合

  • 使用目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能

  • 常见连接池:C3P0、DRUID

  • C3P0连接池

    • C3P0是开源免费的数据库连接池。目前使用它的开源项目有:Spring、Hibernate等。使用C3P0连接池需要导入jar包

    • 开发步骤:

      • 1、idea中创建项目工程

      • 2、在项目工作中导入jar包(数据库的驱动包、c3p0的jar包)

      • 3、编写配置文件 c3p0-config.xml,放在src中(注:文件名一定不要写错)

      • 4、编写工具类

    • 参数说明

      • initialPoolSize : 初始连接数 刚创建好连接池的时候准备的连接数量

      • maxPoolSize : 最大连接数 连接池中最多可以放多少个连接

      • checkoutTimeout : 最大等待时间 连接池中没有连接时最长等待时间

      • maxIdleTime : 最大空闲回收时间 连接池中的空闲连接多久没有使用就会回收

1.3. 事务

数据库中的事务:为了确保多条SQL语句执行完成,在SQL语句执行之前开始事物,在所有的SQL语句执行结束之后,结束事物(提交,回滚)

  • 作用:

    • 保证在一个事务中多次SQL操作要么全都成功,要么全都失败,保障的是数据的安全性、完整性

  • 开启事物: start transaction

  • 执行多条SQL语句并提交

  • 回滚 rollback

  • 原理:

    • 没有开启事务

      • SQL语句会直接操作数据库中的数据

    • 开启了事务

      • SQL语句会缓存在日志中,不会直接啊哦做数据库中的数据

      • commit–缓存的SQL语句会操作数据库中的数据

      • rollback–销毁缓存的数据

  • 事物特征:ACID

    • 原子性Atomicity

    • 一致性Consistency

    • 隔离性Isolation

    • 永久性Durability

  • 并发问题

    • 脏读:一个事务读到了另一个事务未提交的数据.

    • 不可重复读:一个事务读到了另一个事务已经提交(update)的数据。引发另一个事务,在事务中的多次查询结果不一致。

    • 虚读 /幻读:一个事务读到了另一个事务已经提交(insert/delet)的数据。导致另一个事务,在事务中多次查询的结果不一致。