模块 java.sql

包java.sql


java.sql
提供使用 Java 编程语言访问和处理存储在数据源(通常是关系数据库)中的数据的 API。该 API 包括一个框架,通过该框架可以动态安装不同的驱动程序以访问不同的数据源。尽管 JDBC API 主要用于将 SQL 语句传递到数据库,但它也支持从任何数据源以表格格式读取和写入数据。通过 javax.sql.RowSet 接口组提供的读取器/写入器工具可以自定义使用和更新来自电子表格、平面文件或任何其他表格数据源的数据。

JDBC 4.3 API 包括什么

JDBC 4.3 API 包括 java.sql 包(称为 JDBC 核心 API)和 javax.sql 包(称为 JDBC 可选包 API)。这个完整的 JDBC API 包含在 Java 标准版 (Java SE) 版本 7 中。javax.sql 包将 JDBC API 的功能从客户端 API 扩展到服务端 API,它是Java 企业版 (Java EE) 技术。

版本

JDBC 4.3 API 合并了所有以前的 JDBC API 版本:
  • JDBC 4.2 API
  • JDBC 4.1 API
  • JDBC 4.0 API
  • JDBC 3.0 API
  • JDBC 2.1 核心 API
  • JDBC 2.0 可选包 API
    (请注意,JDBC 2.1 核心 API 和 JDBC 2.0 可选包 API 统称为 JDBC 2.0 API。)
  • JDBC 1.2 API
  • JDBC 1.0 API

类、接口、方法、字段、构造方法和异常具有以下“since”标记,指示它们何时被引入 Java 平台。在 JDBC API 的 Javadoc 注释中使用这些“since”标记时,它们表示以下内容:

  • 从 9 开始——JDBC 4.3 API 中的新内容和 Java SE 平台的一部分,版本 9
  • 从 1.8 开始——JDBC 4.2 API 中的新内容和 Java SE 平台的一部分,版本 8
  • 从 1.7 开始——JDBC 4.1 API 中的新内容和 Java SE 平台版本 7 的一部分
  • 从 1.6 开始——JDBC 4.0 API 中的新内容和 Java SE 平台版本 6 的一部分
  • 自 1.4 以来——JDBC 3.0 API 中的新内容和 J2SE 平台的一部分,版本 1.4
  • 自 1.2 以来——JDBC 2.0 API 中的新内容和 J2SE 平台的一部分,版本 1.2
  • Since 1.1 或没有“since”标记——在原始 JDBC 1.0 API 和 JDK 1.1 版的一部分中

NOTE:许多新功能都是可选的;因此,驱动程序及其支持的功能存在一些差异。在尝试使用某项功能之前,请始终检查您的驱动程序文档以查看它是否支持某项功能。

NOTE:SQLPermission 已添加到 Java 2 SDK 标准版 1.3 版中。此类用于防止未经授权访问与 DriverManager 关联的日志记录流,其中可能包含表名、列数据等信息。

java.sql 包中包含什么

java.sql 包包含以下 API:
  • 通过 DriverManager 工具与数据库建立连接
    • DriverManager 类——与驱动程序建立连接
    • SQLPermission 类——在安全管理器中运行的代码(例如小程序)尝试通过 DriverManager 设置日志流时提供权限
    • Driver接口——提供基于JDBC技术注册和连接驱动程序的API(“JDBC驱动程序”);通常仅由 DriverManager 类使用
    • DriverPropertyInfo 类——为 JDBC 驱动程序提供属性;一般用户不使用
  • 将 SQL 语句发送到数据库
    • Statement -- 用于发送基本的 SQL 语句
    • PreparedStatement -- 用于发送准备好的语句或基本 SQL 语句(源自 Statement
    • CallableStatement -- 用于调用数据库存储过程(派生自 PreparedStatement
    • Connection 接口——提供创建语句和管理连接及其属性的方法
    • Savepoint -- 在事务中提供保存点
  • 检索和更新查询结果
    • ResultSet接口
  • SQL 类型到 Java 编程语言中的类和接口的标准映射
    • Array 接口 -- SQL ARRAY 的映射
    • Blob 接口 -- SQL BLOB 的映射
    • Clob 接口 -- SQL CLOB 的映射
    • Date 类 -- SQL DATE 的映射
    • NClob 接口 -- SQL NCLOB 的映射
    • Ref 接口 -- SQL REF 的映射
    • RowId 接口 -- SQL ROWID 的映射
    • Struct 接口 -- SQL STRUCT 的映射
    • SQLXML 接口 -- SQL XML 的映射
    • Time 类 -- SQL TIME 的映射
    • Timestamp 类 -- SQL TIMESTAMP 的映射
    • Types 类——为 SQL 类型提供常量
  • 自定义将 SQL 用户定义类型 (UDT) 映射到 Java 编程语言中的类
    • SQLData interface -- 指定一个UDT到这个类实例的映射
    • SQLInput 接口——提供从流中读取 UDT 属性的方法
    • SQLOutput 接口——提供将 UDT 属性写回流的方法
  • 元数据
    • DatabaseMetaData 接口 -- 提供有关数据库的信息
    • ResultSetMetaData 接口——提供有关 ResultSet 对象的列的信息
    • ParameterMetaData 接口——提供有关 PreparedStatement 命令参数的信息
  • 异常
    • SQLException -- 当访问数据出现问题时由大多数方法抛出,以及由于其他原因由某些方法抛出
    • SQLWarning -- 抛出表示警告
    • DataTruncation -- 抛出表示数据可能已被截断
    • BatchUpdateException -- 抛出表明不是批量更新中的所有命令都执行成功

java.sqljavax.sql JDBC 4.3 API 中引入的功能

  • 添加了Sharding支持
  • 增强的 Connection 能够向驱动程序提供提示,表明请求是一个独立的工作单元,正在开始或结束
  • 增强DatabaseMetaData判断是否支持Sharding
  • 添加了方法 driversDriverManager 以返回当前加载和可用的 JDBC 驱动程序的 Stream
  • 添加了对 Statement 的支持以引用文字和简单标识符
  • 阐明了不推荐使用方法的 Java SE 版本

java.sqljavax.sql JDBC 4.2 API 中引入的功能

  • 添加了JDBCType枚举和SQLType接口
  • CallableStatement 中支持 REF CURSORS
  • DatabaseMetaData 返回最大逻辑 LOB 大小以及是否支持 Ref Cursors 的方法
  • 添加了对大量更新计数的支持

java.sqljavax.sql JDBC 4.1 API 中引入的特性

  • 允许 ConnectionResultSetStatement 对象与 try-with-resources 语句一起使用
  • 支持添加到 CallableStatementResultSet 以指定要通过 getObject 方法转换为的 Java 类型
  • DatabaseMetaData 方法返回 PseudoColumns,如果生成的键总是返回
  • 添加了对 Connection 的支持以指定数据库架构、中止和超时物理连接。
  • 添加了在依赖对象已关闭时关闭 Statement 对象的支持
  • 支持获取 DriverDataSourceConnectionPoolDataSourceXADataSource 的父记录器

java.sqljavax.sql JDBC 4.0 API 中引入的特性

  • 自动 java.sql.Driver 发现——不再需要通过 Class.forName 加载 java.sql.Driver
  • 添加了国家字符集支持
  • 添加了对 SQL:2003 XML 数据类型的支持
  • SQLException 增强——添加了对原因链的支持;为常见的 SQLState 类值代码添加了新的 SQLExceptions
  • 增强的 Blob/Clob 功能——提供创建和释放 Blob/Clob 实例的支持以及添加的其他方法以提高可访问性
  • 添加了对访问 SQL ROWID 的支持
  • 添加的支持允许 JDBC 应用程序访问由供应商包装的 JDBC 资源实例,通常在应用程序服务或连接池环境中。
  • 当与 PooledConnection 关联的 PreparedStatement 已关闭或驱动程序确定无效时通知的可用性

java.sqljavax.sql JDBC 3.0 API 中引入的特性

  • 池化语句——重用与池化连接关联的语句
  • Savepoints——允许事务回滚到指定的保存点
  • ConnectionPoolDataSource 定义的属性 -- 指定连接的池化方式
  • PreparedStatement 对象参数的元数据
  • 能够从自动生成的列中检索值
  • 能够同时打开从 CallableStatement 对象返回的多个 ResultSet 对象
  • 能够按名称和索引识别 CallableStatement 对象的参数
  • ResultSet holdability -- 指定游标在事务结束时是保持打开还是关闭的能力
  • 能够检索和更新 Ref 对象引用的 SQL 结构化类型实例
  • 能够以编程方式更新 BLOBCLOBARRAYREF 值。
  • 添加 java.sql.Types.DATALINK 数据类型——允许 JDBC 驱动程序访问存储在数据源外部的对象
  • 添加用于检索 SQL 类型层次结构的元数据

java.sql JDBC 2.1 核心 API 中引入的特性

  • 可滚动的结果集——使用 ResultSet 接口中的新方法,允许将光标移动到特定行或相对于其当前位置的位置
  • 批量更新
  • 程序化更新——使用 ResultSet 更新程序方法
  • 新数据类型——映射 SQL3 数据类型的接口
  • 用户定义类型 (UDT) 的自定义映射
  • 其他功能,包括性能提示、字符流的使用、java.math.BigDecimal 值的完全精度、额外的安全性以及对日期、时间和时间戳值中的时区的支持。

javax.sql JDBC 2.0 可选包 API 中引入的功能

  • DataSource 接口作为建立连接的一种方式。 Java 命名和目录接口 (JNDI) 用于向命名服务注册 DataSource 对象以及检索它。
  • 连接池——允许连接被使用和重用
  • 分布式事务——允许一个事务跨越不同的 DBMS 服务
  • RowSet技术——提供一种方便的处理和传递数据的方式

UDT 的自定义映射

SQL 中定义的用户定义类型 (UDT) 可以映射到 Java 编程语言中的类。 SQL 结构化类型或 SQL DISTINCT 类型是可以自定义映射的 UDT。以下三个步骤设置自定义映射:
  1. 在 SQL 中定义 SQL 结构类型或 DISTINCT 类型
  2. 在 Java 编程语言中定义 SQL UDT 将映射到的类。此类必须实现 SQLData 接口。
  3. Connection 对象的类型map中创建一个条目,其中包含两件事:
    • UDT 的标准 SQL 名称
    • 实现 SQLData 接口的类的 Class 对象

当这些适用于 UDT 时,调用该 UDT 上的方法 ResultSet.getObjectCallableStatement.getObject 将自动为其检索自定义映射。此外,PreparedStatement.setObject 方法会自动将对象映射回其 SQL 类型以将其存储在数据源中。

包装规格

  • 描述
    SQL 类型 ARRAY 的 Java 编程语言中的映射。
    SQLException 的子类在批量更新操作期间发生错误时抛出。
    SQL BLOB 值在 Java 编程语言中的表示(映射)。
    用于执行 SQL 存储过程的接口。
    无法通过调用 Connection.setClientInfo 设置属性的原因的状态枚举
    SQL CLOB 类型在Java 编程语言中的映射。
    与特定数据库的连接(会话)。
    DataSource 对象创建的构建器,用于建立与 data source 对象代表的数据库的连接。
    有关整个数据库的综合信息。
    当数据值由于超出 MaxFieldSize 以外的原因而意外截断时,作为 DataTruncation 异常(写入时)抛出或报告为 DataTruncation 警告(读取时)的异常。
    围绕毫秒值的精简包装器,允许 JDBC 将其识别为 SQL DATE 值。
    每个驱动程序类都必须实现的接口。
    Driver 想要被 DriverManager 通知时必须实现的接口。
    管理一组 JDBC 驱动程序的基本服务。
    用于建立连接的驱动程序属性。
    定义用于标识通用 SQL 类型(称为 JDBC 类型)的常量。
    SQL NCLOB 类型在 Java 编程语言中的映射。
    一个对象,可用于获取有关 PreparedStatement 对象中每个参数标记的类型和属性的信息。
    表示预编译 SQL 语句的对象。
    伪/隐藏列使用的枚举。
    SQL REF 值在 Java 编程语言中的映射,它是对数据库中 SQL 结构化类型值的引用。
    表示数据库结果集的数据表,通常是通过执行查询数据库的语句生成的。
    一个对象,可用于获取有关 ResultSet 对象中列的类型和属性的信息。
    SQL ROWID 值在 Java 编程语言中的表示(映射)。
    RowId 生命周期值的枚举。
    保存点的表示,它是当前事务中的一个点,可以从 Connection.rollback 方法中引用。
    用于指示此对象表示分片键的接口。
    DataSourceXADataSource 对象创建的构建器,用于创建具有受支持数据类型的子键的 ShardingKey
    当无法在 Connection 上设置一个或多个客户端信息属性时,将抛出 SQLException 的子类。
    用于将 SQL 用户定义类型 (UDT) 自定义映射到 Java 编程语言中的类的接口。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类22',或在供应商指定的条件下。
    提供有关数据库访问错误或其他错误信息的异常。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类0A'(值为“零”A)。
    输入流,包含表示 SQL 结构化类型或 SQL 单值类型实例的值流。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类23',或在供应商指定的条件下。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类28',或在供应商指定的条件下。
    SQLException 的子类为 SQLState 类值抛出 '08',或在供应商指定的条件下。
    SQLException 的子类在重试相同操作失败的实例时抛出,除非 SQLException 的原因得到纠正。
    用于将用户定义类型的属性写回数据库的输出流。
    SecurityManager 将在启用 SecurityManager 的应用程序的代码调用 DriverManager.deregisterDriver 方法、DriverManager.setLogWriter 方法、DriverManager.setLogStream(已弃用)方法、SyncFactory.setJNDIContext 方法、SyncFactory.setLogger 方法、Connection.setNetworkTimeout 方法或 Connection.abort 方法时检查的权限.
    SQLException 的子类抛出的情况是,如果应用程序执行一些恢复步骤并重试整个事务,或者在分布式事务的情况下,事务分支,先前失败的操作可能会成功。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类42',或在供应商指定的条件下。
    SQLException 的子类在 Statement.setQueryTimeoutDriverManager.setLoginTimeoutDataSource.setLoginTimeoutXADataSource.setLoginTimeout 指定的超时已过期时抛出。
    当 SQLState 类值为 ' 时抛出 SQLException 的子类40',或在供应商指定的条件下。
    SQLException 的子类为 SQLState 类值 '08',或在供应商指定的条件下。
    SQLException 的子类在以下情况下抛出:先前失败的操作在重试操作时可能能够成功,而无需应用程序级功能的任何干预。
    用于标识通用 SQL 类型的对象,称为 JDBC 类型或供应商特定数据类型。
    提供有关数据库访问警告信息的异常。
    SQL XML 类型的 JavaTM 编程语言中的映射。
    用于执行静态 SQL 语句并返回其生成的结果的对象。
    SQL 结构化类型的 Java 编程语言中的标准映射。
    java.util.Date 类的薄包装器允许 JDBC API 将其识别为 SQL TIME 值。
    围绕 java.util.Date 的薄包装器允许 JDBC API 将其识别为 SQL TIMESTAMP 值。
    定义常量的类,这些常量用于标识通用 SQL 类型,称为 JDBC 类型。
    JDBC 类的接口,当所讨论的实例实际上是代理类时,它提供检索委托实例的能力。