JAVA WEB DAY 11_ JDBC & 连接池

JDBC & 连接池

目标

  • 能够理解JDBC的概念
  • 能够使用Connection接口
  • 能够使用Statement接口
  • 能够使用ResultSet接口
  • 能够使用JDBC实现对单表数据增、删、改、查
  • 能够使用JDBC操作事务
  • 能够完成JDBC实现登录案例
  • 能够使用C3P0连接池
  • 能够使用DRUID连接池
  • 能够编写连接池工具类

01_ JDBC 概述-[★★]

  1. JDBC 是什么:
    英文:Java DataBase Connectivity
    中午:Java 数据库连接技术

  2. JDBC 的作用:
    与数据库建立连接并对数据库执行操作:增删改查操作

  3. JDBC 的组成:
    由一组官方定义的接口(规范)组成:接口实现类由数据库厂商提供:数据库驱动(实现操作数据库接口的类)

  4. JDBC 的好处:
    代码不依赖于任何的数据库
    只需要修改少量配置就可以方便切换到其他厂商数据库

02_ JDBC 核心 API 概述-[★★]

JDBC 核心类和接口 说明
DriveManager 工具类 1. 用于注册数据库驱动
2.用于获取连接对象
Connection 接口 连接对象
与数据库建立连接并形成数据传输通道
Statement 接口 SQL 语句发送对象
作用:将 SQL 语句发送给数据库执行并获得执行结果
ResultSet 接口 结果集对象
作用:用来封装满足查询条件的记录信息
Drive 接口 数据库驱动对象

03_ JDBC 之注册驱动-[★★★]

  • 注册驱动的作用:告诉JVM接下来要操作哪个厂商的数据库了
注册驱动方法 说明
static registerDriver(Driver driver) 驱动会注册两次
Class.forName(“com.mysql.jdbc.Driver”); 只会注册一次
  • 示例代码
/**
  目标:
     1. 理解注册驱动的作用:告诉JVM接下来要操作哪个厂商的数据库了
     2. 掌握注册驱动的方式
     
    DriverManger工具类与注册驱动相关的方法
        * static registerDriver(Driver driver)
        * 注册数据库驱动
        * 存在问题:驱动会被注册两次
 */
public class Demo01 {
   
    public static void main(String[] args) throws Exception{
   
        // 方式1:存在问题:驱动会被注册两次
        // 创建驱动对象(Driver是mysql厂商提供Driver接口的实现类)
        /*Driver driver = new Driver();
        // 注册驱动
        DriverManager.registerDriver(driver);*/

        // 方式二:利用反射触发Driver实现类的加载实现驱动注册
        Class.forName("com.mysql.jdbc.Driver");
    }
}

04_ JDBC 之获取连接对象-[★★★]

  • DriverManager类与数据库建立连接的方法
DriverManager类与数据库建立连接的方法 说明
static Connection getConnetion(
String url,
String username,
String password)
获得连接对象
url:连接字符串
username:用户名
password:密码
static Connection getConnection(
String url, Properties info)
获得连接对象

DriverManager工具类与获得连接对象相关的方法

  • static Connection getConnection(String url, String user, String password)
      与数据库建立连接并返回连接对象
      url: 数据库连接字符串
      user: 用户名 root
      password: 密码 root

  • static Connection getConnection(String url, Properties info)
      与数据库建立连接并返回连接对象
      url: 数据库连接字符串
      info: 属性集合(双列集合,用法和map一样):用来存储用户名和密码
       可以将用户名和密码配置在文件中

数据库连接字符串格式:

  • 完整格式:JDBC协议:子协议://数据库服务器地址:端口号/数据库名
    * JDBC协议:固定值是:jdbc
    * 子协议:一般是数据库厂商的名字,比如mysql或oracle
  • 省略格式:JDBC协议:子协议:/// 数据库名
    * 前提条件:操作本机数据库且端口号是默认值3306

MySQL数据库连接字符串完整格式:jdbc:mysql://localhost:3306/day11
MySQL数据库连接字符串省略格式:jdbc:mysql:///day11

  • 示例代码
/**
   目标:与数据库建立连接并获得Connection对象
 */
public class Demo01 {
   
    public static void main(String[] args) throws Exception{
   
        // 方式1: 获得连接对象
        // test01();

        // 方式2:获得连接对象
        test02();

    }

    /**
     * 获得连接对象
     */
    private static void test02() throws Exception {
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 创建属性集对象
        // 键和值都是String类型
        Properties info = new Properties();
        // 创建输入流关联配置文件
        InputStream in = Demo01.class.getResourceAsStream("/jdbc.properties");
        // 从文件中加载数据到集合中
        info.load(in);
        System.out.println(info);// {user=root, password=root}
        /*info.setProperty("user", "root");
        info.setProperty("password", "root");*/

        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///day11", info);
        System.out.println(conn);
    }

    /**
     *  获得连接对象
     */
    private static void test01() throws Exception{
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day11", "root", "root");
        System.out.println(conn);
    }
}

05_ JDBC 之 Statement 对象概述-[★★★]

  • Statement 对象的作用:将 SQL 语句发送给数据库执行并获取结果

  • 如何获得 Statement 对象:通过连接对象的方法获得:Statement createStatement();

Statement对象常用方法 说明
boolean execute(String sql) 可以执行任意SQL语句
一般用来执行DDL语句:创库或创表
int executeUpdate(String sql) 用于执行增删改语句:返回影响的行数
只要不是查询都称为更新操作
ResultSet executeQuery(String sql) 用于执行查询语句

06_ JDBC 之执行 DDL 语句_创建表-[★★★]

使用JDBC在数据库创建数据表的步骤

  1. 注册驱动:Class.forName("驱动类全名字符串");
  2. 获得连接对象:Connection conn = DriverManger.getConnection("连接字符串","用户名","密码");
  3. 获得SQL语句发送对象:Statement stmt = conn.createStatement();
  4. 准备SQL语句:String sql="....";
  5. 调用SQL语句发送对象的方法:stmt.execute...(sql);
  6. 关闭连接释放资源
  • 示例代码
/**
    目标:使用JDBC在MySQL的数据库中创建一张学生表
     1)	id 是主键,整数类型,自增长
     2)	name 是varchar(20),非空
     3)	性别 是char类型
     4)	生日 是date类型
 */
public class Demo01 {
   
    public static void main(String[] args) throws Exception{
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day11", "root", "root");
        // 3. 获得SQL语句发送对象
        Statement stmt = conn.createStatement();
        // 4. 准备SQL语句
        String sql = "create table student(" +
                "id int primary key auto_increment," +
                "name varchar(20) not null," +
                "gender char(1)," +
                "birthday date);";
        // 5. 调用发送对象的方法执行SQL
        stmt.execute(sql);
        // 6. 释放资源
        stmt.close();
        conn.close();
    }
}

07_JDBC 之执行 DML 语句_增删改-[★★★]

使用JDBC在数据库创建数据表的步骤

  1. 注册驱动:Class.forName("驱动类全名字符串");
  2. 获得连接对象:Connection conn = DriverManger.getConnection("连接字符串","用户名","密码");
  3. 获得SQL语句发送对象:Statement stmt = conn.createStatement();
  4. 准备SQL语句:String sql="....";
  5. 调用SQL语句发送对象的方法:stmt.execute...(sql);
  6. 关闭连接释放资源
  • 示例代码
/**
  目标:使用JDBC实现增删改功能
 */
public class Demo01 {
   
    public static void main(String[] args) throws Exception{
   
        // 插入数据
        // testInsert();

        // 更新数据
        // testUpdate();

        // 删除数据
        testDelete();
    }


    // 插入数据
    public static void testInsert()throws Exception{
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///day11", "root", "root");
        // 3. 获得SQL语句发送对象
        Statement stmt = conn.createStatement();
        // 4. 准备SQL语句
        String sql = "insert into student values(null,'rose','女','2000-12-20'),(null,'luck','男','1990-02-21');";
        // 5. 调用SQL语句发送对象的方法
        int row = stmt.executeUpdate(sql);
        System.out.println("row = " + row);
        // 6. 关闭连接释放资源
        stmt.close();
        conn.close();
    }

    // 修改数据:将id为3的学生性别修改为女,姓名修改为:lily
    public static void testUpdate()throws Exception{
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///day11", "root", "root");
        // 3. 获得SQL语句发送对象
        Statement stmt = conn.createStatement();
        // 4. 准备SQL语句
        String sql = "update student set gender = '女', name='lily' where id = 3;";
        // 5. 调用SQL语句发送对象的方法
        int row = stmt.executeUpdate(sql);
        System.out.println("row = " + row); // 1
        // 6. 关闭连接释放资源
        stmt.close();
        conn.close();
    }

    // 删除数据:把id为2的学生删除
    public static void testDelete() throws Exception{
   
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获得连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///day11", "root", "root");
        // 3. 获得SQL语句发送对象
        Statement stmt = conn.createStatement();
        // 4. 准备SQL语句
        String sql = "delete from student where id = 2";
        // 5. 调用SQL语句发送对象的方法
        int row = stmt.executeUpdate(sql);
        System.out.println("row = " + row)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值