如何使用JDBC操作数据库?JDBC快速入门

时间:2023-02-19 22:00:19

(文章目录)

1. 前言

在 Java 开发中,使用 Java 语言操作数据库是非常重要的一部分,那么 Java 语言是如何操作数据库的呢?我们需要使用不同厂商的数据库时,例如 MySQL,Oracle 等,显然一套 Java 代码是不能操作不同的数据库的,那么怎样实现一套 Java 代码对不同的数据库的操作呢?

如何使用JDBC操作数据库?JDBC快速入门

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 包中定义的实现类。

如何使用JDBC操作数据库?JDBC快速入门

当我们使用不同的数据库时,例如测试时使用 MySQL 数据库,部署时使用Oracle 数据库,只需要编写一套 Java 代码便可以实现对不同关系型数据库的操作。

2.2 优点

使用 JDBC 操作关系型数据库时,各大数据库厂商提供了不同的实现类,我们不需要针对不同的数据库进行单独开发,因此,我们也可以随时替换数据库,而不用大量修改Java代码。

我们只需要在使用时导入需要使用的数据库对应的驱动 jar包到项目中,便可以实现对指定数据库的操作,使 Java 操作数据库变得轻松便捷。

下图就是MySQL的驱动jar包:

如何使用JDBC操作数据库?JDBC快速入门

不同版本的 jar 包可以在官网下载。

3. JDBC 快速入门

使用 Java 语言操作数据库,实际上就是 Java 代码将 sql 语句发送到 MySQL 数据库服务端,MySQL 服务端接收并执行 sql 语句,同时返回一个执行结果,最后该结果会发送到 Java 代码进行处理。

如何使用JDBC操作数据库?JDBC快速入门

对数据库的操作大致分为以下几个步骤:

  1. 注册驱动
  2. 获取连接
  3. 编写sql
  4. 获取执行sql对象
  5. 执行sql
  6. 处理返回结果
  7. 释放资源

在进行编码之前,需要先创建工程,导入数据库的驱动 jar 包。这里以 JDBC 操作 MySQL 数据库为例,步骤如下:

创建空项目,定义项目名称及路径:

如何使用JDBC操作数据库?JDBC快速入门

在File / Project Structure 中进行项目设置,JDK版本,编译版本等:

如何使用JDBC操作数据库?JDBC快速入门

创建新模块,指定名称及位置:

如何使用JDBC操作数据库?JDBC快速入门

在 jdbc-demo 模块中新建 Lib 文件夹:

如何使用JDBC操作数据库?JDBC快速入门

将下载好的 MySQL驱动 jar 包导入 Lib 目录下作为库文件:

如何使用JDBC操作数据库?JDBC快速入门

右键 MySQL 驱动 jar 包,点击 Add as Library ,并选择模块下有效:

如何使用JDBC操作数据库?JDBC快速入门

创建好工程以后,就可以编写代码操作数据库啦!

在 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();
    }
}