JDBC中常用的类和接口

Java 语言提供了丰富的类和接口用于数据库编程,利用这些类和接口可以方便地进行数据访问和处理。本节将讲解一些常用的 JDBC 类和接口,这些类或接口都在 java.sql 包中。

DriverManager类

DriverManager 类是 JDBC 的管理层,用于管理数据库中的驱动程序。在操作指定数据库之前,需要使用 Java 中 Class 类的静态方法 forName(String className) 加载指定数据库的驱动程序。

例如,加载 MySQL 数据库驱动程序(包名为 mysql_connector_java_8.X.X.jar)的代码如下:

try {
    Class.forName("com.mysql.cj.jdbc.Driver");  // 加载 MySQL 数据库驱动
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

加载完相应数据库的驱动程序后,Java 会自动将驱动程序的实例注册到 DriverManager 类中,这时即可通过 DriverManager 类的 getConnection() 方法连接相应的数据库。DriverManager 类的常用方法如表17.1所示。

image 2024 03 05 18 54 24 955
Figure 1. 表17.1 DriverManager类的常用方法

例如,使用DriverManager连接本地MySQL数据库的代码如下:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&allowPublicKeyRetrieval=true","root","password");

在上述连接中,127.0.0.1 表示本地 IP 地址,3306 是 MySQL 的默认端口,test 是数据库名称,useUnicode 用来启用 Unicode 字符集,characterEncoding 指定了字符集为 UTF-8,useSSL 指明不启用 SSL 连接,serverTimezone 将时区定为中国,zeroDateTimeBehavior 让空的日期数据以 null 形式返回,allowPublicKeyRetrieval 允许客户端从服务器上获取公钥。

除了连接 MySQL 8.0 数据库,其他常见数据库的加载驱动包和连接代码如下。

  • 加载 Oracle 数据库驱动程序(包名为 ojdbc.jar 或 class14.jar):

    Class.forName("oracle.jdbc.driver.OracleDriver ");
    DriverManager.getConnection("jdbc:oracle:thin:@//127.0.0.1:1521/test","system","password");
  • 加载SQL Server 2005及以上版本数据库驱动程序(包名为 sqljdbc4.jar):

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test","sa","password");
  • 加载MySQL 5.X版本数据库驱动程序(包名为 mysql_connector_java_5.X.X_bin.jar):

    Class.forName("com.mysql.jdbc.Driver ");
    DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","password");

Connection接口

Connection 接口代表与特定的数据库的连接,在连接上下文中执行 SQL 语句并返回结果。Connection 接口的常用方法如表17.2所示。

image 2024 03 05 19 02 21 972
Figure 2. 表17.2 Connection接口的常用方法

Statement接口

Statement 接口用于在已经建立连接的基础上向数据库中发送 SQL 语句。在 JDBC 中有 3 种 Statement 对象,分别是 Statement、PreparedStatement 和 CallableStatement。Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 继承了 Statement,用来执行动态 SQL 语句;CallableStatement 继承了 PreparedStatement,用于执行对数据库的存储过程的调用。Statement 接口的常用方法如表17.3所示。

image 2024 03 05 19 05 10 526
Figure 3. 表17.3 Statement接口的常用方法

PreparedStatement接口

PreparedStatement 接口用来动态地执行 SQL 语句。PreparedStatement 实例执行的动态 SQL 语句,将被预编译并保存到 PreparedStatement 实例中,从而可以反复地执行该 SQL 语句。PreparedStatement 接口的常用方法如表17.4所示。

image 2024 03 05 19 06 23 717
Figure 4. 表17.4 PreparedStatement接口提供的常用方法

ResultSet接口

ResultSet 接口类似于一个临时表,用来暂时存储数据库查询操作所获得的结果集。ResultSet 实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过 next() 方法可将指针向下移。

在 JDBC 2.0(JDK 1.2) 之后,该接口添加了一组更新方法 updateXXX(),该方法有两个重载方法,它们可根据列的索引号和列的名称来更新指定列。但该方法并没有将对数据进行的操作同步到数据库中,因此需要使用 updateRow() 方法或 insertRow() 方法来更新数据库。ResultSet 接口的常用方法如表17.5所示。

image 2024 03 05 19 07 29 837
Figure 5. 表17.5 ResultSet接口的常用方法