目录
5.2 Statement 与 PreparedStatement的区别?
1. JDBC概述
1.1 什么是JDBC
JDBC (Java Data Base Connectivity) 是 Java 访问数据库的标准规范。是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。是 Java 访问数据库的标准规范。
1.2 JDBC原理
JDBC 是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库。每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生产厂商提供。
JDBC 就是由 sun 公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动 jar 包,我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。
2. JDBC开发
-
数据准备
在 MySQL 中准备好以下数据
-- 创建 jdbc_user表
CREATE TABLE jdbc_user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
PASSWORD VARCHAR(50),
birthday DATE
);
-- 添加数据
INSERT INTO jdbc_user (username, PASSWORD,birthday)
VALUES
('admin1', '123','1991/12/24'),
('admin2','123','1995/12/24'),
('test1', '123','1998/12/24'),
('test2', '123','2000/12/24');
-
MySql驱动包
首先将 MySQL 驱动包添加到 jar 包库文件夹 myJar 中,它用于存放当前项目需要的所有 jar 包。然后在 IDEA 的项目中配置 jar 包库的位置。最后创建一个新的模块 jdbc_task01 并添加 jar 包库的依赖。
步骤分析:
1 . 获取驱动 (可以省略)
2 . 获取连接
3 . 获取 Statement 对象
4 . 处理结果集 (只在查询时处理)
5 . 释放资源
1. 注册驱动
JDBC规范定义驱动接口: java.sql.Driver
MySql驱动包提供了实现类: com.mysql.jdbc.Driver
从 JDBC 3 开始,目前已经普遍使用的版本,可以不用注册驱动而直接使用。
使用反射方法 Class.forName 加载 Driver 类的时候会自动执行 Driver 类的静态代码块里面的注册驱动的代码。
public class JDBCDemo01 {
public static void main(String[] args) throws ClassNotFoundException {
// 注册驱动 forName 方法执行将类进行初始化
Class.forName("com.mysql.jdbc.Driver");
}
}
2. 获得连接
解决插入中文乱码问题:characterEncoding=UTF-8 指定字符的编码、解码格式。
public class JDBCDemo02 {
public static void main(String[] args) throws Exception {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接 url, 用户名, 密码
String url = "jdbc:mysql://localhost:3306/db4?characterEncoding=UTF-8";
Connection con = DriverManager.getConnection(url, "root", "123456");
}
}
3. 获取语句执行平台
Statement createStatement(); -- 创建 SQL 语句执行对象。
int executeUpdate(String sql); -- 执行增删改语句,返回 int 类型,代表受影响的行数。
public class JDBCDemo03 {
public static void main(String[] args) throws Exception {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接 url,用户名, 密码
String url = "jdbc:mysql://localhost:3306/db4";
Connection con = DriverManager.getConnection(url, "root", "123456");
// 获取 Statement 对象
Statement statement = con.createStatement();
// 执行创建表操作
String sql = "create table test01(id int, name varchar(20), age int);";
// 增删改操作
int i = statement.executeUpdate(sql);
// 返回值是受影响的函数
System.out.println(i);
// 关闭流
statement.close();
con.close();
}
}
4. 处理结果集
ResultSet executeQuery(String sql); -- 执行查询语句,返回 ResultSet 结果集对象。只有在进行查询操作的时候,才会处理结果集。
ResultSet 接口作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。
public class