1. 数据库编程的必备条件
编程语言,如 Java , C 、 C++ 、 Python 等
数据库,如 Oracle , MySQL , SQL Server 等
数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如: MySQL 提
供了 Java 的驱动包 mysql-connector-java ,需要基于 Java 操作 MySQL 即需要该驱动包。同样的,
要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包 ojdbc 。
2. Java 的数据库编程: JDBC
JDBC ,即 Java Database Connectivity , java 数据库连接。是一种用于执行 SQL 语句的 Java API ,它是
Java 中的数据库连接规范。这个 API 由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为 Java
开发人员操作数据库提供了一个标准的 API ,可以为多种关系数据库提供统一访问。
3. JDBC 工作原理
JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问 API 的一种高级抽象,它主要包
含一些通用的接口类。
JDBC 访问数据库层次结构 :
JDBC 优势:
Java 语言访问数据库操作完全面向抽象接口编程
开发数据库应用不用限定在特定数据库厂商的 API
程序的可移植性大大增强 4. JDBC 使用
4.1 JDBC 开发案例
准备数据库驱动包,并添加到项目的依赖中:
在项目中创建文件夹 lib ,并将依赖包 mysql-connector-java-5.1.47.jar 复制到 lib 中。再配置该 jar
包到本项目的依赖中:右键点击项目 Open Module Settings ,在 Modules 中,点击项目,配置
Dependencies ,点击 + , JARS or Directories ,将该 lib 文件夹配置进依赖中,表示该文件夹下的
jar 包都引入作为依赖。
建立数据库连接
创建操作命令( Statement )
执行 SQL 语句
处理结果集
释放资源(关闭结果集,命令,连接)
// 加载 JDBC 驱动程序:反射,这样调用初始化 com.mysql.jdbc.Driver 类,即将该类加载到 JVM 方法
区,并执行该类的静态方法块、静态属性。
Class . forName ( "com.mysql.jdbc.Driver" );
// 创建数据库连接
Connection connection =
DriverManager . getConnection ( "jdbc:mysql://localhost:3306/test?
user=root&password=root&useUnicode=true&characterEncoding=UTF-8" );
//MySQL 数据连接的 URL 参数格式如下:
jdbc : mysql : // 服务器地址 : 端口 / 数据库名 ? 参数名 = 参数值
Statement statement = connection . createStatement ();
ResultSet resultSet = statement . executeQuery (
"select id, sn, name, qq_mail, classes_id from student" );
while ( resultSet . next ()) {
int id = resultSet . getInt ( "id" );
String sn = resultSet . getString ( "sn" );
String name = resultSet . getString ( "name" );
int classesId = resultSet . getInt ( "classes_id" );
System . out . println ( String . format ( "Student: id=%d, sn=%s, name=%s,
classesId=%s" , id , sn , name , classesId ));
}
// 关闭结果集
if ( resultSet != null ) {
try {
resultSet . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
} 4.2 JDBC 使用步骤总结
1. 创建数据库连接 Connection
2. 创建操作命令 Statement
3. 使用操作命令来执行 SQL
4. 处理结果集 ResultSet
5. 释放资源
5. JDBC 常用接口和类
5.1 JDBC API
在 Java JDBC 编程中对数据库的操作均使用 JDK 自带的 API 统一处理,通常与特定数据库的驱动类是完全
解耦的。所以掌握 Java JDBC API (位于 java.sql 包下) 即可掌握 Java 数据库编程。
5.2 数据库连接 Connection
Connection 接口实现类由数据库提供,获取 Connection 对象通常有两种方式:
一种是通过 DriverManager (驱动管理类)的静态方法获取:
一种是通过 DataSource (数据源)对象获取。 实际应用中会使用 DataSource 对象。
以上两种方式的区别是:
}
// 关闭命令
if ( statement != null ) {
try {
statement . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
// 关闭连接命令
if ( connection != null ) {
try {
connection . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
// 加载 JDBC 驱动程序
Class . forName ( "com.mysql.jdbc.Driver" );
// 创建数据库连接
Connection connection = DriverManager . getConnection ( url );
DataSource ds = new MysqlDataSource ();
(( MysqlDataSource ) ds ). setUrl ( "jdbc:mysql://localhost:3306/test" );
(( MysqlDataSource ) ds ). setUser ( "root" );
(( MysqlDataSource ) ds ). setPassword ( "root" );
Connection connection = ds . getConnection (); 1. DriverManager 类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源
时,通过 connection.close() 都是关闭物理连接。
2. DataSource 提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
是可以复用的,每次使用完数据库连接,释放资源调用 connection.close() 都是将
Conncetion 连接对象回收。
5.3 Statement 对象
Statement 对象主要是将 SQL 语句发送到数据库中。 JDBC API 中主要提供了三种 Statement 对象。
实际开发中最常用的是 PreparedStatement 对象,以下对其的总结: 主要掌握两种执行 SQL 的方法:
executeQuery() 方法执行后返回单个结果集的,通常用于 select 语句
executeUpdate() 方法返回值是一个整数,指示受影响的行数,通常用于 update 、 insert 、 delete
语句
5.4 ResultSet 对象
ResultSet 对象它被称为结果集,它代表符合 SQL 语句条件的所有行,并且它通过一套 getXXX 方法提供
了对这些行中数据的访问。
ResultSet 里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当
前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用 ResultSet 的 next()
方法 , 如果我们想要得到 ResultSet 里的所有记录,就应该使用 while 循环。
6. 应用案例
技术知识点:
JDBC API 的 CRUD
JDBC API 的事务控制
功能要求:
学生表
自动化 2019 级 5 班新增一名同学程咬金
修改该同学的班级为中文系 2019 级 3 班 查询所有中文系 2019 级 3 班的同学
删除名叫程咬金的同学
成绩表
新增许仙同学的成绩:英文 80 分, Java65 分,计算机原理 76 分,语文 59 分
修改许仙同学的成绩:英文 81 分
删除许仙同学的语文成绩
查询中文系 2019 级 3 班同学的成绩