(文章目录)
1. 前言
在 Java 开发中,使用 Java 语言操作数据库是非常重要的一部分,那么 Java 语言是如何操作数据库的呢?我们需要使用不同厂商的数据库时,例如 MySQL,Oracle 等,显然一套 Java 代码是不能操作不同的数据库的,那么怎样实现一套 Java 代码对不同的数据库的操作呢?
JDBC 应运而生,JDBC 是使用Java语言操作关系型数据库的一套API,其中定义了对数据库操作的规范,
不同的数据库厂商提供了不同的 JDBC 实现类,称为驱动,使用时,只需要导入需要的数据库驱动 jar 包,便可以操作不同的关系型数据库,其实际是使用了 jar 包中的实现类。
该系列文章的学习目标:
- 什么是 JDBC,如何使用?
- 使用 JDBC 完成数据的增删改查操作
- JDBC API 熟练使用
2. JDBC 概述
2.1 概念
JDBC , Java DataBase Connectivity
, 是使用 Java 语言操作关系型数据库的一套API。本质上来说,JDBC 中定义了一套操作关系型数据库的规范,但是我们不能直接使用这套接口来操作数据库,于是各大数据库厂商提供了 JDBC 不同的实现类,称为驱动,例如 MySQL 驱动,此时,我们只需要操作 JDBC 规范好的代码便可以完成对数据库的操作。在实现对数据库的操作时,其底层是使用了 jar 包中定义的实现类。
当我们使用不同的数据库时,例如测试时使用 MySQL 数据库,部署时使用Oracle 数据库,只需要编写一套 Java 代码便可以实现对不同关系型数据库的操作。
2.2 优点
使用 JDBC 操作关系型数据库时,各大数据库厂商提供了不同的实现类,我们不需要针对不同的数据库进行单独开发,因此,我们也可以随时替换数据库,而不用大量修改Java代码。
我们只需要在使用时导入需要使用的数据库对应的驱动 jar包到项目中,便可以实现对指定数据库的操作,使 Java 操作数据库变得轻松便捷。
下图就是MySQL的驱动jar包:
不同版本的 jar 包可以在官网下载。
3. JDBC 快速入门
使用 Java 语言操作数据库,实际上就是 Java 代码将 sql 语句发送到 MySQL 数据库服务端,MySQL 服务端接收并执行 sql 语句,同时返回一个执行结果,最后该结果会发送到 Java 代码进行处理。
对数据库的操作大致分为以下几个步骤:
- 注册驱动
- 获取连接
- 编写sql
- 获取执行sql对象
- 执行sql
- 处理返回结果
- 释放资源
在进行编码之前,需要先创建工程,导入数据库的驱动 jar 包。这里以 JDBC 操作 MySQL 数据库为例,步骤如下:
创建空项目,定义项目名称及路径:
在File / Project Structure 中进行项目设置,JDK版本,编译版本等:
创建新模块,指定名称及位置:
在 jdbc-demo 模块中新建 Lib 文件夹:
将下载好的 MySQL驱动 jar 包导入 Lib 目录下作为库文件:
右键 MySQL 驱动 jar 包,点击 Add as Library ,并选择模块下有效:
创建好工程以后,就可以编写代码操作数据库啦!
在 idea 中右键 src / new / Java Class ,输入类名 JDBCDemo 创建一个新的类。
第一步:注册驱动
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
目的是把 Driver 类加载到内存中。其实,Java 中用于注册驱动的是 registerDriver() 方法,而在 Driver 类中使用了该方法,所以只要把 Driver 类加载到内存中 ,包含 registerDriver 方法的静态代码块就会执行,驱动就会被注册。我们可以查看JDK源码中的Driver 类:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
第二步:获取连接
String url="jdbc:mysql://localhost:3306?useSSL=false";
String username="root";
String pass word="abc123";
Connection conn = DriverManager.getConnection(url, username, password);
目的是通过 getConnection() 方法获取数据库连接 Connection 类对象,这里没有直接把数据传入方法之中,而是定义了三个局部变量,url,数据库用户名和密码,其中 url 参数有固定的语法格式:
jdbc:mysql://ip地址(域名):端口号?参数键值对1&参数键值对2
第三步:定义sql
String sql="update account set money=2000 where name='张三'";
目的是定义操作数据库的 sql 语句。
第四步:获取执行sql的对象
Statement stmt = conn.createStatement();
目的是在执行 sql 语句之前,先获取执行 sql 的对象 statement。
第五步:执行sql
int count = stmt.executeUpdate(sql);
目的是为了将 sql 发送到数据库服务端,让数据库服务端执行完 sql,并且返回一个结果,这里的 executeUpdate() 返回受影响的行数。
第六步:处理返回结果
System.out.println(count);
目的是处理数据库服务端返回的 sq l执行结果,这里我们打印了 executeUpdate() 方法返回的受影响的行数。
第七步:释放资源
stmt.close();
conn.close();
目的是在完成对数据库的操作以后释放资源,否则数据库文件将一直被被程序占用,释放资源时遵循先开后释放的原则。
使用 JDBC 操作 MySQL 数据库完整代码:
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
String url="jdbc:mysql://localhost:3306/db1?useSSL=false";
String username="root";
String pass word="abc123";
Connection conn = DriverManager.getConnection(url, username, password);
//3.定义sql
String sql="update account set money=2000 where name='张三'";
//4.获取执行sql的对象
Statement stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);
//6.处理结果
System.out.println(count);
//7.释放资源
stmt.close();
conn.close();
}
}