# JDBC 基础

# 基本概念

JDBC(Java Database Connectivity)是 Java 应用程序访问数据库的应用程序接口(API),它为 Java 应用程序开发提供了统一的结构标准 API,并通过一组驱动程序实现了独立于 DBMS 的数据库访问。

数据库厂商提供面向 JDBC 标准接口的数据库驱动程序,JDBC API 通过这些驱动程序可实现对不同 DBMS 数据库的访问。

使用 JDBC 接口,可以对所连接的数据库进行 SQL 操作访问。JDBC API 是在 java.sql 中定义的,主要有:Connection、DriverManager、Statement、PreparedStatement 和 ResultSet 等类及接口。

JDBC Driver Manager 负责动态管理数据库连接所需要的驱动程序,实现 Java 应用程序通过驱动程序访问特定数据库。可以使用 java.sql.DriverManager 接口访问 JDBC Driver Manager,如设定数据库访问类型参数、加载数据库驱动和初始化 JDBC 调用的。

各个数据库厂商为支持 JDBC 标注接口,都提供了自己 DBMS 的 JDBC 驱动程序,以便 Java 应用程序可以连接到相应的数据库,进行数据访问处理。

# 常用的 JDBC API

在 java.sql 包中,定义了 JDBC API 的各个接口与类,常用的有:

接口/类 说明
java.sql.Connection 与指定数据库建立会画连接接口
java.sql.Date 处理数据库中的日期类型(java.util.Date 的子类)
java.sql.Driver 数据库驱动接口
java.sql.DriverManager 管理数据库厂商驱动程序类
java.sql.PreparedStatement 带参数的 Statement 接口
java.sql.ResultSet 数据查询结果集接口
java.sql.SQLException 提供数据库访问异常信息类
java.sql.Statement 提供 SQL 执行和结果查询接口

# JDBC 数据库访问步骤

# 加载数据库驱动程序

Java 应用程序访问数据库前,必须先加载相应的数据库驱动,才能建立 Java 应用程序与目标数据库间的连接。

该数据库驱动程序需要加载到内存,并在 DriverManager 中进行注册。加载数据库驱动程序可通过调用 Class.forName ( ) 方法实现:

Class.forName("com.mysql.jdbc.Driver");

Class.forName ( ) 为注册驱动语句,com.mysql.jdbc.Driver 为 MySQL 数据库的驱动类。

# MySQL 6+ 驱动的使用要求

使用 mysql-connector 6+ 连接 MySQL 时『多』出来两个小要求:

  • MySQL 驱动类发生了变化。原来的 com.mysql.jdbc.Driver 被标注为废弃,改用新的 Driver:com.mysql.cj.jdbc.Driver

  • 可选参数 serverTimezone 变成了必要参数:serverTimezone=UTC

  • 例如:

    jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    

# 建立数据库连接

为了获取数据库连接对象 Connection ,需要调用 JDBC 接口 DriverManager 的 getConnection (url, username, password) 方法。

  • 参数 url:数据库连接地址。格式为:“JDBC协议:IP地址:端口/数据库名称”
  • 参数 username:数据库用户名
  • 参数 password:用户密码
String url = "jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(url, "username", "password");

# 创建执行 SQL 语句的 Statement 对象

建立连接后,可以向数据库发送 SQL 执行语句。而发送 SQL 执行语句依赖于 Connection 接口的 createStatement 方法创建的 Statement 对象。

Statement 对象有 3 种类型:

  • Statement:用于执行不带参数的简单 SQL 语句
  • PreparedStatement:用于执行带参数的预编译 SQL 语句
  • CallableStatement:用于执行数据库的存储过程调用
Statement st = conn.createStatement();

# 发送 SQL 执行语句

创建 Statement 对象之后,就可以使用 Statement 对象的 3 个基本方法之一向数据库发送 SQL 语句执行操作:

  • .executeQeury ( )
  • .executeUpdate ( )
  • .execute ( )

execute ( ) 方法可以执行“增删改查”四大操作,但是,考虑到“增删改”与“查”操作的差异性,通常是使用 executeQuery ( ) 方法执行“增删改”,而用 executeQuery ( ) 方法执行“查”。

# 结果集对象遍历

在执行 SQL 查询语句后,JDBC API 便将数据表查询结果返回到 ResultSet 结果对象中。

为了从结果集中对查询结果数据记性处理,需要调用 ResultSet 结果集对象的 getString 、getInt、getDate 等方法对结果集当前行的指定列进行读取处理。

# 关闭对象

当完成数据库操作访问后,需要关闭 Java 程序中为访问数据库所创建的各种对象:

注意

关闭顺序是『先创建的后关闭,后创建的先关闭』。

rs.close();     // 关闭 ResultSet 对象
st.close();     // 关闭 Statemtnt 对象 
conn.close();   // 关闭 Connection 对象