Java 数据库连接 (JDBC)

Java 数据库连接 (JDBC) 是用于与关系数据库进行连接和交互的 Java API。

下表中列出了 JDBC 功能部件:

表 1. JDBC 功能部件
功能 支持 受支持的 Java 版本 受支持的企业 Java 版本
jdbc-4.0 JDBC 版本 4.0
  • Java SE 8
  • Java SE 11
  • Java SE 17
  • Java EE 6
jdbc-4.1 JDBC 版本 4.1
  • Java SE 8
  • Java SE 11
  • Java SE 17
  • Java EE 6
  • Java EE 7
jdbc-4.2 JDBC 版本 4.2
  • Java SE 8
  • Java SE 11
  • Java SE 17
  • Java EE 6
  • Java EE 7
  • Java EE 8
  • 雅加达 EE 8
  • Jakarta EE 9
  • Jakarta EE 10
jdbc-4.3 JDBC 版本 4.3
  • Java SE 11
  • Java SE 17
  • Java EE 6
  • Java EE 7
  • Java EE 8
  • 雅加达 EE 8
  • Jakarta EE 9
  • Jakarta EE 10
cicsts:jdbc-1.0 CICS® 支持 JDBC Db2® 类型 2 连接
  • Java SE 8
  • Java SE 11
  • Java SE 17
  • Java EE 6
  • Java EE 7
  • Java EE 8
  • 雅加达 EE 8
  • Jakarta EE 9
  • Jakarta EE 10

有关配置 JDBC 支持的更多信息,请参阅 使用 JDBC配置数据库连接

使用数据库交互开发应用程序

有两种方法可与 Db2 数据库进行交互。

数据源

可以使用 dataSourcecicsts_dataSource 配置元素中定义的 jndiName 在 JNDI 中查找 javax.sql.DataSource 。 此 javax.sql.DataSource 对象可用于获取 java.sql.Connection 对象以与数据库进行交互。

根据 javax.sql.DataSource的实现,在关闭之前落实或回滚连接可能很重要。 有关更多信息,请参阅 Liberty JDBC 功能部件与 CICS JDBC 功能部件之间的差异

驱动程序管理器

java.sql.DriverManager 类可用于获取 java.sql.Connection 以与数据库进行交互。 CICS类型2连接的URL 为 jdbc:default:connection 。 有关更多信息,请参阅使用 IBM Data Server Driver for JDBC and SQLJDriverManager 接口连接到数据源

Liberty JDBC 功能部件与 CICS JDBC 功能部件之间的差异

Liberty 提供了 JDBC 功能部件 jdbc-4.0jdbc-4.1jdbc-4.2jdbc-4.3 以连接到各种关系数据库。 在 CICS Liberty 中, Liberty JDBC 支持可用于通过类型为 2 的 CICS DB2CONN 连接到 Db2 数据库,或者远程连接到类型为 4 的连接。 Liberty JDBC 支持 java.sqljavax.sql API ,并通过 dataSource 配置提供 javax.xml.DataSource 的实现。

CICS 提供了 JDBC 功能部件 cicsts:jdbc-1.0 ,以支持通过 CICS DB2CONN进行类型 2 连接。 CICS 支持 java.sql API ,并通过 cicsts_dataSource 配置提供 javax.sql.DataSource 的实现。
注: cicsts_dataSourcedataSource不完全兼容。 某些 Liberty 功能部件需要使用 dataSource。 例如, dataSource 必须用于 batch-1.0 持久性。

CICS 和 Liberty JDBC 支持使用 JDBC API 的事务。 对于 JDBC 类型 2 连接, Db2 更新作为 CICS 工作单元的一部分通过 CICS DB2CONN 资源进行管理。 Liberty 和 CICS JDBC 在管理连接的方式上有所不同。

自由JDBC处理完成后将自动关闭连接,导致事务回滚或提交,具体取决于commitOrRollbackOnCleanup的属性dataSource元素。 默认设置为rollback,因此隐含的java.sql.Connection.commit()必须调用,导致CICS要提交的工作单元。

CICS JDBC 由 CICS 工作单元管理。 当 CICS 任务落实或回滚时,将落实或回滚数据库更新。

表 2。 JDBC 事务差异
类型 连接类型 autoCommit 缺省清除行为
CICS JDBC 类型 2 false 落实 CICS UOW。
自由 JDBC 类型 2 false 回滚 CICS UOW。
类型 4 truefalse 落实本地事务。 CICS UOW 不受影响。

可以使用全局事务来管理事务作用域数据源。 在全局事务中, Liberty 和 CICS javax.sql.DataSource 的事务行为一致。 有关 Liberty 中全局事务的更多信息,请参阅 Java 事务 API (JTA)

示例

使用 javax.sql.DataSource 接口连接到数据库,使用 dataSourcecicsts_dataSource 配置指定 jndiName jdbc/defaultCICSDataSource
import java.sql.Connection;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

public class DataSourceExample
{
    // Inject the DataSource resource using JNDI
    @Resource(name = "jdbc/defaultCICSDataSource")
    private DataSource dataSource;

    public void accessDb() throws SQLException
    {
        try(Connection conn = dataSource.getConnection())
        {
            // Interact with SQL using the Connection object
        }
    }
}
使用使用 cicsts_jdbcDriver 配置的 java.sql.DriverManager 类连接到数据库。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DriverManagerExample
{
    public void accessDatabase() throws SQLException
    {
        try(Connection conn = DriverManager.getConnection("jdbc:default:connection"))
        {
            // Interact with SQL using the Connection object
        }
    }
}