Java_常用API_4_JDBC

JDBC

概述

概念

  1. Java 数据库连接,全称 Java DataBase Connectivity ,简称 JDBC ,是 Sun 公司定义的操作关系型数据库的一套 API 。要通过 Java 语言操作关系型数据库中的数据,就要使用相应数据库厂商的 JDBC 驱动( JDBC 接口实现类 ),自己则是面向接口编程。

    Java代码
    JDBC
    MySQL驱动
    Oracle驱动
    DB2驱动
    MySQL数据库
    Oracle数据库
    DB2数据库
  2. 使用 JDBC 的好处:

    • 各数据库厂商使用相同的接口,Java 代码不需要针对不同数据库分别开发;
    • 可随时替换底层数据库,访问数据库的 Java 代码基本不变。

基本步骤

  1. 将驱动 jar 包导入工程中,在代码中注册驱动:

    Class.forName("com.mysql.jdbc.Driver"); // 以 MySQL 为例
    

    之所以这样能注册驱动(就是把实现类对象加到集合里),是因为 com.mysql.jdbc.Driver 中在静态代码块中写了注册驱动的程序,因此只要用反射将它加载一下,就会自动执行其静态代码块中的内容,也就是自动注册了驱动:

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
    
  2. 获得与数据库的一个连接对象( Connection ):

    Connection conn = DriverManager.getConnection(url, username, password);
    
  3. 获得 SQL 语句执行对象( Statement ):

    Statement stmt = conn.createStatement();
    
  4. 执行 SQL 语句:

    stmt.executeUpdate(sql);   // String sql =  "update..." ;
    
  5. 处理返回结果:

    ...
    
  6. 释放资源:

    stmt.close();
    conn.close();
    

常用 API

DriverManager 类

  1. 数据库驱动管理器 DriverManager 的常用作用:

    • 注册驱动;

    • 建立与数据库的连接。

  2. 常用方法:

    方法名说明
    static void registerDriver(Driver driver)注册驱动
    static Connection getConnection(String url, String user, String password)建立一个连接,并返回该连接对象
    • 其中 Driver 接口的完整名为 java.sql.Driver ,是所有数据库驱动类必须实现的接口。

    • MySQL 5 之后的驱动包,可以省略注册驱动的步骤,会自动加载 jar 包中 META-INF/services/java.sql.Driver 文件中的驱动类。

    • url 的语法格式:(以 MySQL 为例)

      jdbc:mysql://ip地址(或域名):端口号/数据库名称?参数键值对1&参数键值对2…
      

Connection 接口

  1. 数据库连接对象 Connection 的作用:

    • 获取执行 SQL 的对象;

    • 事务管理。

  2. 常用方法:

    方法名说明
    Statement createStatement()返回一个能发送普通非预编译 SQL 到数据库执行的对象
    PreparedStatement prepareStatement(String sql)返回一个能发送预编译 SQL 到数据库进行预编译机制执行的对象
    void setAutoCommit(boolean autoCommit)设置此连接的事务自动提交模式为给定的状态,true 自动 | false 手动
    void commit()使上次提交或回滚以来所做的所有更改持久化,
    并释放此连接对象持有的所有数据库锁
    void rollback()撤销当前事务中所有的更改,并释放此连接对象持有的所有数据库锁
    void close()关闭资源

    其中,使用事务的一般模式是:

    try {
        conn.setAutoCommit(false); // 开启事务
        ... // 执行SQL,数据操作
        conn.commit(); // 提交事务
    } catch () {
        conn.rollback(); // 回滚事务
    }
    

Statement 接口

  1. 普通 SQL 执行对象 Statement 用来执行普通的非预编译 SQL 语句。

  2. 常用方法:

    方法名说明
    int executeUpdate(String sql)执行 DML 或 DDL 语句,返回受影响的行数
    ResultSet executeQuery(String sql)执行 DQL 语句,返回结果集合
    void close()关闭资源

PreparedStatement 接口

  1. 预编译 SQL 执行对象 PreparedStatement 用来执行预编译 SQL 语句。

    首先要让 MySQL 开启预编译功能:在代码中编写 url 时需要加上以下参数:

    useServerPrepStmts=true
    
  2. 常用方法:

    方法名说明
    void setXxx(int paraIdx, xxx val)给预编译 SQL 中的占位符 ? 赋值:
    xxx 代表某数据库数据类型,paraIdx 为位置编号(从 1 开始),val 为值
    int executeUpdate()执行 DML 或 DDL 语句,返回受影响的行数
    ResultSet executeQuery()执行 DQL 语句,返回结果集合

    其中,调用 “” 方法时,不需要再传递 SQL 语句(因为获取 SQL 语句执行对象时就已经让数据库对该 SQL 语句进行过预编译了)。

ResultSet 接口

  1. 结果集合对象 ResultSet 用于封装 SQL 查询语句的结果。

  2. 常用方法:

    用于从 ResultSet 对象中获取我们想要的数据。

    方法名说明
    boolean next()将游标向后移动一行,再判断所指向的行是否为有效行(有数据)(起始:第一行的前一行)
    xxx getXxx(String columnLabel)xxx 代表某数据库数据类型,columnLabel 为列名
    xxx getXxx(int columnIndex)xxx 代表某数据库数据类型,columnIndex 为列的序号(从 1 开始)
    void close()关闭资源

DataSource 接口

数据库连接池

  • 概念与作用

    • 数据库连接池是个容器,负责分配、管理数据库连接( Connection )对象。

    • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

    • 它会释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

  • 原理:

    连接池是在一开始就创建好了一些连接对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连接池。这样就可以起到资源重用,也节省了频繁创建连接销毁连接所花费的时间,从而提升了系统响应的速度。

    DataSource
    connection_1
    connection_2
    ...
    user_1
    user_2
    user_...
    DataBase
  • 常用 API :

    方法名说明
    Connection getConnection()从数据库连接池中获取一个连接对象

Druid

  • 常见的数据库连接池有 DBCP 、C3P0 、Druid 等,此处以 Druid(德鲁伊)为例。

  • 使用步骤:

    • 导入 jar 包,配置依赖。

    • 定义配置文件 druid.properties

      driverClassName=数据库驱动类全名
      url=jdbc:mysql:地址:端口/数据库名?参数键值对
      username=用户名
      password=密码
      # 初始化连接数量
      initialSize=数字
      # 最大连接数
      maxActive=数字
      # 最大等待时间
      maxWait=数字(毫秒为单位)
      
    • 加载配置文件:

      Properties prop = new Properties();
      prop.load(new FileInputStream(配置文件 druid.properties 的路径字符串));
      
    • 获取数据库连接池对象:

      DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
      
    • 从数据库连接池获取数据库连接:

      Connection connection = dataSource.getConnection();
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值