模块 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
接口 -- SQLARRAY
的映射Blob
接口 -- SQLBLOB
的映射Clob
接口 -- SQLCLOB
的映射Date
类 -- SQLDATE
的映射NClob
接口 -- SQLNCLOB
的映射Ref
接口 -- SQLREF
的映射RowId
接口 -- SQLROWID
的映射Struct
接口 -- SQLSTRUCT
的映射SQLXML
接口 -- SQLXML
的映射Time
类 -- SQLTIME
的映射Timestamp
类 -- SQLTIMESTAMP
的映射Types
类——为 SQL 类型提供常量
- 自定义将 SQL 用户定义类型 (UDT) 映射到 Java 编程语言中的类
SQLData
interface -- 指定一个UDT到这个类实例的映射SQLInput
接口——提供从流中读取 UDT 属性的方法SQLOutput
接口——提供将 UDT 属性写回流的方法
- 元数据
DatabaseMetaData
接口 -- 提供有关数据库的信息ResultSetMetaData
接口——提供有关ResultSet
对象的列的信息ParameterMetaData
接口——提供有关PreparedStatement
命令参数的信息
- 异常
SQLException
-- 当访问数据出现问题时由大多数方法抛出,以及由于其他原因由某些方法抛出SQLWarning
-- 抛出表示警告DataTruncation
-- 抛出表示数据可能已被截断BatchUpdateException
-- 抛出表明不是批量更新中的所有命令都执行成功
java.sql
和 javax.sql
JDBC 4.3 API 中引入的功能
- 添加了
Sharding
支持 - 增强的
Connection
能够向驱动程序提供提示,表明请求是一个独立的工作单元,正在开始或结束 - 增强
DatabaseMetaData
判断是否支持Sharding - 添加了方法
drivers
到DriverManager
以返回当前加载和可用的 JDBC 驱动程序的 Stream - 添加了对
Statement
的支持以引用文字和简单标识符 - 阐明了不推荐使用方法的 Java SE 版本
java.sql
和 javax.sql
JDBC 4.2 API 中引入的功能
- 添加了
JDBCType
枚举和SQLType
接口 - 在
CallableStatement
中支持REF CURSORS
DatabaseMetaData
返回最大逻辑 LOB 大小以及是否支持 Ref Cursors 的方法- 添加了对大量更新计数的支持
java.sql
和 javax.sql
JDBC 4.1 API 中引入的特性
- 允许
Connection
、ResultSet
和Statement
对象与 try-with-resources 语句一起使用 - 支持添加到
CallableStatement
和ResultSet
以指定要通过getObject
方法转换为的 Java 类型 DatabaseMetaData
方法返回 PseudoColumns,如果生成的键总是返回- 添加了对
Connection
的支持以指定数据库架构、中止和超时物理连接。 - 添加了在依赖对象已关闭时关闭
Statement
对象的支持 - 支持获取
Driver
、DataSource
、ConnectionPoolDataSource
和XADataSource
的父记录器
java.sql
和 javax.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.sql
和 javax.sql
JDBC 3.0 API 中引入的特性
- 池化语句——重用与池化连接关联的语句
- Savepoints——允许事务回滚到指定的保存点
- 为
ConnectionPoolDataSource
定义的属性 -- 指定连接的池化方式 PreparedStatement
对象参数的元数据- 能够从自动生成的列中检索值
- 能够同时打开从
CallableStatement
对象返回的多个ResultSet
对象 - 能够按名称和索引识别
CallableStatement
对象的参数 ResultSet
holdability -- 指定游标在事务结束时是保持打开还是关闭的能力- 能够检索和更新
Ref
对象引用的 SQL 结构化类型实例 - 能够以编程方式更新
BLOB
、CLOB
、ARRAY
和REF
值。 - 添加
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 结构化类型或 SQLDISTINCT
类型是可以自定义映射的 UDT。以下三个步骤设置自定义映射:
- 在 SQL 中定义 SQL 结构类型或
DISTINCT
类型 - 在 Java 编程语言中定义 SQL UDT 将映射到的类。此类必须实现
SQLData
接口。 - 在
Connection
对象的类型map中创建一个条目,其中包含两件事:- UDT 的标准 SQL 名称
- 实现
SQLData
接口的类的Class
对象
当这些适用于 UDT 时,调用该 UDT 上的方法 ResultSet.getObject
或 CallableStatement.getObject
将自动为其检索自定义映射。此外,PreparedStatement.setObject
方法会自动将对象映射回其 SQL 类型以将其存储在数据源中。
包装规格
相关文档
- 课程:JDBC 基础知识(Java 教程 > JDBC 数据库访问)
- “JDBC API 教程和参考,第三版”
-
类描述SQL 类型
ARRAY
的 Java 编程语言中的映射。SQLException
的子类在批量更新操作期间发生错误时抛出。SQLBLOB
值在 Java 编程语言中的表示(映射)。用于执行 SQL 存储过程的接口。无法通过调用Connection.setClientInfo
设置属性的原因的状态枚举SQLCLOB
类型在Java 编程语言中的映射。与特定数据库的连接(会话)。从DataSource
对象创建的构建器,用于建立与data source
对象代表的数据库的连接。有关整个数据库的综合信息。当数据值由于超出MaxFieldSize
以外的原因而意外截断时,作为DataTruncation
异常(写入时)抛出或报告为DataTruncation
警告(读取时)的异常。围绕毫秒值的精简包装器,允许 JDBC 将其识别为 SQLDATE
值。每个驱动程序类都必须实现的接口。当 Driver 想要被DriverManager
通知时必须实现的接口。管理一组 JDBC 驱动程序的基本服务。用于建立连接的驱动程序属性。定义用于标识通用 SQL 类型(称为 JDBC 类型)的常量。SQLNCLOB
类型在 Java 编程语言中的映射。一个对象,可用于获取有关PreparedStatement
对象中每个参数标记的类型和属性的信息。表示预编译 SQL 语句的对象。伪/隐藏列使用的枚举。SQLREF
值在 Java 编程语言中的映射,它是对数据库中 SQL 结构化类型值的引用。表示数据库结果集的数据表,通常是通过执行查询数据库的语句生成的。一个对象,可用于获取有关ResultSet
对象中列的类型和属性的信息。SQL ROWID 值在 Java 编程语言中的表示(映射)。RowId 生命周期值的枚举。保存点的表示,它是当前事务中的一个点,可以从Connection.rollback
方法中引用。用于指示此对象表示分片键的接口。当无法在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.setQueryTimeout
、DriverManager.setLoginTimeout
、DataSource.setLoginTimeout
、XADataSource.setLoginTimeout
指定的超时已过期时抛出。当 SQLState 类值为 ' 时抛出SQLException
的子类40',或在供应商指定的条件下。SQLException
的子类为 SQLState 类值 '08',或在供应商指定的条件下。SQLException
的子类在以下情况下抛出:先前失败的操作在重试操作时可能能够成功,而无需应用程序级功能的任何干预。用于标识通用 SQL 类型的对象,称为 JDBC 类型或供应商特定数据类型。提供有关数据库访问警告信息的异常。SQL XML 类型的 JavaTM 编程语言中的映射。用于执行静态 SQL 语句并返回其生成的结果的对象。SQL 结构化类型的 Java 编程语言中的标准映射。java.util.Date
类的薄包装器允许 JDBC API 将其识别为 SQLTIME
值。围绕java.util.Date
的薄包装器允许 JDBC API 将其识别为 SQLTIMESTAMP
值。定义常量的类,这些常量用于标识通用 SQL 类型,称为 JDBC 类型。JDBC 类的接口,当所讨论的实例实际上是代理类时,它提供检索委托实例的能力。