站点图标 AI技术聚合

JDBC编程-Java连接并操作数据库详解

目录


前言

JDBC是一种用于在 Java 程序和数据库之间建立连接的标准API,通过 JDBC,开发人员可以轻松地与各种数据库进行交互。本文将介绍 JDBC 的基本概念、使用方法以及示例代码。

Java中操作数据库,底层基础的方式就是JDBC。

一.什么是JDBC?

JDBC (Java Database Connectivity)是 Java 语言连接数据库的标准API,它提供了一套用于执行 SQL 语句、访问和操作数据库的接口和类,由 java.sql.* 包和 javax.sql.* 包中的一些类和接口组成。通过 JDBC,开发人员可以实现与不同数据库系统的通信,无论是关系型数据库(如 MySQL、Oracle)还是非关系型数据库(如 MongoDB)。

JDBC的本质其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!

二.JDBC 的工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口和类。

JDBC使用的层级关系:Java语言(制定标准)—>JDBC API(规范)—>JDBC驱动程序(使用)—>数据库。

61cc1a72968b49b2ab6937adbd3201b9.png

JDBC访问数据库层次

数据库是一个统称,包含很多关系型和非关系型数据库,常用主流的数据库有以下:

(1)MySQL数据库

(2)Oracle数据库

(3)SQL Server数据库

(4)MongoDB数据库

(5)Sqlite数据库

我们使用代码操作数据库的前提,需要数据库要提供API,使用API才能完成对数据库的各种操作。

API—–>>Application Programming Interface(应用程序编程接口):是一组定义了类、方法、接口和常量的集合,用于在开发应用程序时与其它软件组件进行交互和通信。Java API 是指 Java平台提供的各种类、接口和方法,用于开发 Java 应用程序。

在API的创建过程中,由于各种数据库要是分别建立一个API,这无疑会增加学习成本。因此,Java率先站了出来,把这些数据库操作规范到一起,提供一套标准的API。所以程序员就不需要关注各种数据库API的差异,只需要掌握Java这一套API即可。

使用 Java API 可以大大加快和简化开发过程。通过调用 API 提供的方法和使用其定义的类和接口,开发人员可以利用已经封装好的功能来实现自己的应用程序,而不需要从头开始编写所有代码。Java后端数据库框架,其本质上也是JDBC的各种封装。

三.JDBC编程步骤(增删改)

增加、删除和修改这三种操作控制台不需要给予反馈,只需要对数据库的表进行更新,所以操作步骤和代码部分几乎相同;数据库的查询操作请向下划动至第四部分。

本案例以MySQL数据库(Server version: 8.0.31)为例,编译器使用Idea(2022.2)中文版,具体讲解JDBC编程操作。

JDBC 的增删改工作过程可以分为以下几个步骤:

前提操作:导入jar包

导入 JDBC 驱动程序(jar包)并添加到依赖中。

在使用 JDBC 前,我们需要先导入适用于目标数据库的 JDBC 驱动程序。驱动程序可以从数据库供应商的官方网站下载,并在项目中引入,注意数据库连接驱动应与数据库版本相匹配。

MySQL数据库的连接驱动官网下载步骤,可以参考本博主的另一篇博客:JDBC编程∶下载MySQL数据库连接驱动-CSDN博客

  • 在根据文章下载完成驱动之后,将下载好的JDBC驱动包添加到依赖当中。先在一个新建Java项目中,右键该项目名称依次点击新建-目录,创建一个空目录;

新建一个空目录

  •  将下载好的JDBC驱动复制-粘贴到新建的目录中去;如图:

  •  然后右键新建的项目,选择添加为库;如图:

  • 确定即可将JDBC驱动程序添加到项目依赖中。

(1)先创建 DataSource 对象

使用 JDBC 提供的 DataSource接口,我们可以创建一个用于获取数据库连接的对象。通过设置连接信息(如数据库 URL、用户名和密码),可以建立与数据库服务器的连接。代码如下:

//1.先创建 DataSource对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/数据库?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
        ((MysqlDataSource) dataSource).setUser("用户名");
        ((MysqlDataSource) dataSource).setPassword("密码");

先获取数据源,使用new MysqlDataSource();来进行对象的创建,然后进行数据库url、账号和密码的设置。

URL:表示网络上资源的位置。在设置dataSource.setUrl的时候,URL各部分格式表示如下:

  • jdbc:mysql: 表示需要连接数据库的类型;
  • //localhost 表示当前主机;
  • :3306 表示主机给数据库设置的端口号;
  • “数据库” 表示需要连接MySQL数据库的名称;
  • ? 分隔符,表示开启设置表达式
  • characterEncoding=utf8 表示设置的中文字符编码方式;
  • useSSL=false 表示加密传输的禁用,禁用是为了避免数据库无法正确启动;
  • allowPublicKeyRetrieval=true 表示允许公钥获取;
  • serverTimezone=Asia/Shanghai 表示设置默认的时间区;

用户名,一般都会设为root,密码是自己之前安装时设置的密码。

(2)建立数据库-服务器连接

再创建 DataSource 之后,创建Connection对象,使用dataSource.getConnection()来进行数据库服务器的远程连接。连接好了之后,才能进行后续的 请求-相应和交互。

//2.建立和数据库服务器之间的连接
        Connection connection = dataSource.getConnection();

注:在Connection创建时,以及后续PrepareStatement的创建都要引入java.sql包,不是其他包。

(3)创建 SQL 语句

使用 JDBC,我们可以构建各种 SQL 语句,包括查询、插入、更新和删除操作。SQL 语句以字符串的形式在 Java 代码中表示并且SQL代码中的语句不需要写”;”。

构建一个sql语句,并且将一个sql语句进行解析,转换成服务器可以直接执行的数据,使用PreparedStatement statement = connection.prepareStatement(sql)来进行对sql语句的预解析,可以使服务器在处理数据的时候更快。

//3.构建SQL语句,代码中的SQL语句不需要写";"
        String sql1 = "insert into student values (101,'张三')";//增加操作
        PreparedStatement statement = connection.prepareStatement(sql1);

        String sql2 = "delete from student where name='李四'";//删除操作
        PreparedStatement statement = connection.prepareStatement(sq2);

        String sql3 = "update student set ID=103 where name='王五'";//修改操作
        PreparedStatement statement = connection.prepareStatement(sq3);

(4)执行 SQL 语句

将 SQL 语句通过PrepareStatement对象发送给数据库服务器,并执行。使用statement.executeUpdate()方法来进行该语句的执行,将它发送到服务器上执行,此处的n为方法的返回值,返回的是改变的行数。

//4.将SQL发送给数据库服务器
        int n = statement.executeUpdate();
        System.out.println("n=" + n)

(5)关闭连接与资源释放

在完成数据库操作后,需要关闭连接以释放资源,以确保程序的健壮性和效率。

  • 释放顺序:后获取到的资源,先释放。
//5.关闭连接,释放资源
        statement.close();
        connection.close();

完整增删改代码示例:

import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {
        //1.先创建 DataSource对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/java_110?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");
        //2.建立和数据库服务器之间的连接,连接好了之后,才能进行后续的 请求-相应 交互
        Connection connection = dataSource.getConnection();
        //3.构建SQL语句,代码中的SQL语句不需要写";"
        String sql1 = "insert into student values (101,'张三')";//增加操作
        PreparedStatement statement = connection.prepareStatement(sql1);
        //String sql2 = "delete from student where name='李四'";//删除操作
        //PreparedStatement statement = connection.prepareStatement(sq2);
        //String sql3 = "update student set ID=103 where name='王五'";//修改操作
        //PreparedStatement statement = connection.prepareStatement(sq3);
        //4.将SQL发送给数据库服务器
        int n = statement.executeUpdate();
        System.out.println("n=" + n);
        //5.关闭连接,释放资源,释放顺序:后获取到的资源,先释放
        statement.close();
        connection.close();
    }
}

四.JDBC查询操作

在进行JDBC的查询操作时,导入jar包驱动的操作和增删查的前三步骤完全相同,按照上文操作即可。在上文第(4)步执行SQL语句时,出现不同,具体查询的操作步骤如下:

(1)(2)(3)步骤:同上文

(4)执行 SQL 语句

//4.将SQL发送给数据库服务器
        ResultSet resultSet = statement.executeQuery();
  • 使用 executeUpdate 方法执行更新操作(如插入、更新、删除),返回一个整数,表示改变的行数;
  • 使用 executeQuery 方法执行查询操作,返回一个结果集;

(5)遍历结果集

根据执行的 SQL 操作,我们可以对执行结果进行处理。通过 JDBC 提供的类和方法,我们可以获取查询结果集。

  • ResultSet表示查询的结果集(临时表);
  • 通过naxt()方法,可以获取临时表中的每行数据;
  • resultSet提供了getXXX方法(getInt(“列名”)或getString(“列名”)等),查询的列是什么类型,则使用什么类型的方法;
//5.遍历结果集
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name"); // 使用getString()方法获取字符串字段
            System.out.println("id =" + id + ", name =" + name);
        }

(6)释放资源

在完成数据库操作后,需要关闭连接以释放资源,以确保程序的健壮性和效率。

释放顺序:后获取到的资源,先释放。

//6.关闭连接,释放资源
        resultSet.close();
        statement.close();
        connection.close();

完整查询代码示例: 

下述代码,表示查询数据库中,student表中,id列和name列的全部数据。

import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {
        //1.先创建 DataSource
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/数据库名" +
                "?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai" +
                "&useUnicode=true"); // 设置useUnicode为true
        ((MysqlDataSource) dataSource).setUser("数据库用户名");
        ((MysqlDataSource) dataSource).setPassword("数据库密码");
        //2.建立和数据库服务器之间的连接,连接好了之后,才能进行后续的 请求-相应 交互
        Connection connection = dataSource.getConnection();
        //3.构建SQL语句
        String sql = "SELECT * FROM student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.将SQL发送给数据库服务器
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name"); // 使用getString()方法获取字符串字段
            System.out.println("id =" + id + ", name =" + name);
        }
        //6.关闭连接,释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

五.JDBC编程总结

JDBC 是 Java 连接数据库的标准API,它提供了一套简单而强大的接口和类用于与数据库进行交互。通过 JDBC,我们可以轻松地执行各种数据库操作,包括查询、插入、更新和删除等。

JDBC的操作步骤大致如下所示:

  1. 创建DataSource对象;
  2. 建立数据库和服务器的连接;
  3. 构建sql语句;
  4. 执行sql语句;
  5. 遍历结果集;
  6. 关闭连接,释放资源;

在本文中,我们介绍了 JDBC 的工作原理和基本步骤,并演示了使用 JDBC 向数据库增加、删除、修改和查询操作的示例代码。

通过学习和实践 JDBC,将能够更加灵活和高效地处理与数据库相关的任务。希望本文对你的学习和开发工作有所帮助!😇

希望这篇博客对你有帮助!如果有其他问题或需要进一步帮助,请随时提问。🙂😀😁

文章出处登录后可见!

已经登录?立即刷新
退出移动版