当前位置: 首页 > article >正文

Java学习教程,从入门到精通,JDBC驱动程序类型及语法知识点(91)

JDBC驱动程序类型及语法知识点

一、JDBC驱动程序类型

JDBC驱动程序主要有以下四种类型:

1. Type 1:JDBC - ODBC桥驱动程序(JDBC - ODBC Bridge Driver)

  • 特点:这种驱动程序是Java与ODBC(Open Database Connectivity)的桥梁。它通过调用本地的ODBC驱动程序来实现与数据库的连接。由于需要本地驱动程序的支持,所以它不是纯Java驱动程序。
  • 优点:开发简单,可以连接到任何支持ODBC的数据库。
  • 缺点:性能相对较差,因为需要在Java和本地代码之间进行转换。并且在不同的操作系统平台上需要安装不同的ODBC驱动程序,移植性较差。
  • 适用场景:适用于小型应用程序或开发阶段,当需要快速连接到数据库进行测试时。

2. Type 2:本地API驱动程序(Native API Driver)

  • 特点:这种驱动程序使用本地API(如DB2的CLI、Oracle的OCI等)来与数据库进行交互。它需要在客户端安装特定数据库的本地库。
  • 优点:性能比Type 1驱动程序好,因为直接使用数据库的本地API,减少了中间的转换环节。
  • 缺点:不是纯Java驱动程序,需要在不同的操作系统上安装不同的本地库,移植性差。并且需要对数据库的本地API有深入的了解。
  • 适用场景:适用于对性能要求较高,且开发环境和运行环境相对固定,能够安装数据库本地库的应用程序。

3. Type 3:网络协议驱动程序(Network Protocol Driver)

  • 特点:这种驱动程序通过网络协议与数据库服务器进行通信。客户端的驱动程序将JDBC调用转换为数据库服务器能够理解的网络协议,然后通过网络发送给服务器。服务器端有一个中间件(如数据库连接服务器)将网络协议转换为数据库能够理解的本地协议。
  • 优点:纯Java驱动程序,具有良好的移植性。可以在任何支持Java的平台上运行,不需要安装数据库的本地库。并且可以实现数据库连接的集中管理,便于维护和安全控制。
  • 缺点:增加了网络通信的复杂性,可能会导致性能略微下降。并且需要在服务器端部署中间件,增加了系统的复杂度。
  • 适用场景:适用于分布式应用程序,特别是当客户端和数据库服务器不在同一台机器上,且需要集中管理数据库连接时。

4. Type 4:纯Java驱动程序(Pure Java Driver)

  • 特点:这种驱动程序完全用Java编写,不需要任何本地库或中间件。它将JDBC调用直接转换为数据库能够理解的网络协议,通过网络发送给数据库服务器。
  • 优点:纯Java驱动程序,具有最好的移植性。可以在任何支持Java的平台上运行,不需要安装额外的本地库或中间件。并且性能较好,因为减少了中间环节的转换。
  • 缺点:需要数据库服务器支持特定的网络协议。并且对于一些复杂的数据库操作,可能不如Type 2驱动程序灵活。
  • 适用场景:是最常用的驱动程序类型,适用于大多数Java应用程序,特别是需要在多种操作系统平台上运行的应用程序。

二、JDBC语法知识点

1. 加载驱动程序

在使用JDBC之前,需要加载数据库驱动程序。对于Type 4驱动程序,通常使用Class.forName()方法加载驱动类。例如,对于MySQL数据库,加载驱动的代码如下:

java复制

Class.forName("com.mysql.cj.jdbc.Driver");

这行代码的作用是将MySQL的JDBC驱动类加载到JVM(Java虚拟机)中,使得后续可以通过JDBC API与MySQL数据库进行连接和交互。

2. 建立数据库连接

加载驱动程序后,需要建立与数据库的连接。使用DriverManager.getConnection()方法可以建立连接。该方法需要传入数据库的URL、用户名和密码。以MySQL数据库为例,建立连接的代码如下:

java复制

String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

其中,url是数据库的连接字符串,指定了数据库的类型(jdbc:mysql://)、服务器地址(localhost)、端口号(3306)、数据库名称(mydatabase)以及一些连接参数(如字符编码、时区等)。usernamepassword分别是数据库的用户名和密码。DriverManager.getConnection()方法返回一个Connection对象,代表与数据库的连接。

3. 创建Statement对象

建立连接后,需要创建一个Statement对象来执行SQL语句。Statement对象可以执行静态SQL语句,即在程序编译时已经确定的SQL语句。创建Statement对象的代码如下:

java复制

Statement stmt = conn.createStatement();

这行代码通过Connection对象的createStatement()方法创建了一个Statement对象。使用Statement对象可以执行查询、更新等SQL操作。

4. 执行SQL查询语句

使用Statement对象可以执行SQL查询语句。执行查询语句的方法是executeQuery(),它返回一个ResultSet对象,代表查询结果。例如,查询users表中所有记录的代码如下:

java复制

String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);

sql变量存储了要执行的SQL查询语句。stmt.executeQuery(sql)方法执行查询语句,并将结果存储在ResultSet对象rs中。通过遍历ResultSet对象,可以获取查询结果中的每一行数据。

5. 处理查询结果

获取到ResultSet对象后,需要遍历它来处理查询结果。使用ResultSet对象的next()方法可以移动到结果集的下一行,getXXX()方法(如getString()getInt()等)可以获取指定列的值。例如,处理查询结果的代码如下:

java复制

while (rs.next()) {
    int id = rs.getInt("id");
    String username = rs.getString("username");
    String email = rs.getString("email");
    System.out.println("ID: " + id + ", Username: " + username + ", Email: " + email);
}

while循环中,rs.next()方法逐行遍历结果集。每次循环时,使用rs.getInt("id")rs.getString("username")rs.getString("email")等方法获取当前行的idusernameemail列的值,并将它们打印出来。

6. 执行SQL更新语句

除了查询语句,还可以使用Statement对象执行SQL更新语句,如插入、更新、删除等操作。执行更新语句的方法是executeUpdate(),它返回一个整数,表示受影响的行数。例如,插入一条记录到users表的代码如下:

java复制

String sql = "INSERT INTO users (username, email) VALUES ('kimi', 'kimi@example.com')";
int rowsAffected = stmt.executeUpdate(sql);
System.out.println("Affected rows: " + rowsAffected);

sql变量存储了要执行的SQL插入语句。stmt.executeUpdate(sql)方法执行更新语句,并返回受影响的行数,存储在rowsAffected变量中。最后,将受影响的行数打印出来。

7. 关闭资源

在完成数据库操作后,需要关闭打开的资源,包括ResultSetStatementConnection对象。关闭资源可以释放数据库连接和系统资源,避免资源泄露。关闭资源的代码如下:

java复制

if (rs != null) {
    try {
        rs.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
if (stmt != null) {
    try {
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
if (conn != null) {
    try {
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

在关闭资源时,需要先判断资源对象是否为null,然后在try代码块中调用close()方法关闭资源。如果在关闭资源时发生SQLException异常,使用catch代码块捕获并打印异常信息。

三、案例代码

以下是一个完整的JDBC案例代码,演示了如何使用JDBC连接MySQL数据库,执行查询和更新操作,并处理查询结果。

java复制

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcExample {
    public static void main(String[] args) {
        // 数据库连接信息
        String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs =

http://www.kler.cn/a/505469.html

相关文章:

  • Navicat Premium 原生支持阿里云 PolarDB 数据库
  • 灵活妙想学数学
  • Linux之进程
  • Unity3D实现WEBGL打开Window文件对话框打开/上传文件
  • 音视频入门基础:RTP专题(1)——RTP官方文档下载
  • 如何使用 Excel 进行多元回归分析?
  • 可以用于分割字符串的方法(python)
  • Mock 单元测试详细
  • 11-天猫订单数据分析
  • 深度剖析底层原理:CPU缓存一致性的奥秘
  • 机器学习-归一化
  • 低代码独特架构带来的编译难点及多线程解决方案
  • 【2025 Rust学习 --- 16 集合:Rust的STL】
  • go-echo学习笔记
  • 【Qt】01-了解QT
  • T-SQL编程
  • Python3 函数
  • 网安-HTML
  • 移动端H5缓存问题
  • 太速科技-402-基于TMS320C6678+XC7K325T的高性能计算核心板
  • 青少年编程与数学 02-006 前端开发框架VUE 27课题、TypeScript
  • 数字可调控开关电源设计(论文+源码)
  • C# 运算符和类型强制转换(对象的相等比较)
  • 深度学习|表示学习|作为损失函数的交叉熵|04
  • 单片机存储器和C程序编译过程
  • vue3封装el-tour漫游式引导