JDBC:JDBC 的启动和运行
1 数据准备
-- 创建 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');
2 MySql驱动包
1. 将MySQL驱动包添加到jar包库文件夹中,Myjar文件夹,用于存放当前项目需要的所有jar包
2. 在 idea中 配置jar包库的位置
3. 创建一个新的项目jdbc_task01, 配置jar包库
3 API使用
1.注册驱动
JDBC规范定义驱动接口: java.sql.Driver
MySql驱动包提供了实现类: com.mysql.jdbc.Driver
加载注册驱动的方式 |
描述 |
Class.forName(数据库驱动实现类) |
加载和注册数据库驱动,数据库驱动由数据库厂商MySql提供 "com.mysql.jdbc.Driver" |
1) 代码示例
public class JDBCDemo01 { public static void main(String[] args) throws ClassNotFoundException { //1.注册驱动 // forName 方法执行将类进行初始化 Class.forName("com.mysql.jdbc.Driver"); } }
2) 为什么这样可以注册驱动?
我们知道 Class类的forName方法 ,可以将一个类初始化, 现在我们一起看一下Driver类的 源码
// Driver类是MySql提供的数据库驱动类, 实现了JDBC的Driver接口 java.sql.Driver public class Driver extends NonRegisteringDriver implements java.sql.Driver { // 空参构造 public Driver() throws SQLException { } //静态代码块,Class类的 forName()方法将Driver类 加载到内存, static代码块会自动执行 static { try { /* DriverManager 驱动管理类 registerDriver(new Driver) 注册驱动的方法 注册数据库驱动 */ DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } }
注:
从 JDBC3 开始,目前已经普遍使用的版本,可以不用注册驱动而直接使用。 Class.forName 这句话可以省略。
2.获得连接
Connection 接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现
使用 DriverManager类的静态方法,getConnection可以获取数据库的连接
获取连接的静态方法 |
说明 |
Connection getConnection(String url, String user, String password) |
通过连接字符串和用户名,密码来获取数据 库连接对象 |
1) getConnection方法 3个 连接参数说明
连接参数 |
说明 |
user |
登录用户名 |
password |
登录密码 |
url |
|
2) 对URL的详细说明
jdbc:mysql://localhost:3306/db4?characterEncoding=UTF-8
- JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔
- 第一部分是协议 jdbc,这是固定的
- 第二部分是子协议,就是数据库名称,连接mysql数据库,第二部分当然是mysql了;
- 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据 库服务器的IP地址(localhost)、端口号(3306),以及要使用的 数据库名称 组成。
3) 代码示例
public class JDBCDemo02 { public static void main(String[] args) throws Exception { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 url,用户名, 密码 String url = "jdbc:mysql://localhost:3306/db4"; Connection con = DriverManager.getConnection(url, "root", "123456"); //com.mysql.jdbc.JDBC4Connection@2e3fc542 System.out.println(con); } }
3.获取语句执行平台
通过Connection 的 createStatement方法 获取sql语句执行对象
Connection接口中的方法 |
说明 |
Statement createStatement() |
创建 SQL语句执行对象 |
Statement : 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结 果的对象。
Statement类 常用方法 |
说明 |
int executeUpdate(String sql); |
执行insert update delete语句.返回int类型,代表受影响的行 数 |
ResultSet executeQuery(String sql); |
执行select语句, 返回ResultSet结果集对象 |
代码示例
public class JDBCDemo03 { public static void main(String[] args) throws Exception { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 url,用户名, 密码 String url = "jdbc:mysql://localhost:3306/db4"; Connection con = DriverManager.getConnection(url, "root", "123456"); //3.获取 Statement对象 Statement statement = con.createStatement(); //4.执行创建表操作 String sql = "create table test01(id int, name varchar(20),age int);"; //5. 增删改操作 使用executeUpdate,增加一张表 int i = statement.executeUpdate(sql); //6. 返回值是受影响的函数 System.out.println(i); //7.关闭流 statement.close(); con.close(); } }
4.处理结果集
只有在进行查询操作的时候, 才会处理结果集
代码示例
public class JDBCDemo04 { public static void main(String[] args) throws SQLException { //1.注册驱动 可以省略 //2.获取连接 String url = "jdbc:mysql://localhost:3306/db4"; Connection con = DriverManager.getConnection(url, "root", "123456"); //3.获取 Statement对象 Statement statement = con.createStatement(); String sql = "select * from jdbc_user";
//执行查询操作,返回的是一个 ResultSet 结果对象 ResultSet resultSet = statement.executeQuery(sql); //4.处理结果集 resultSet
// 见下篇
} }