模块 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 编程语言中的类
SQLDatainterface -- 指定一个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对象的参数 ResultSetholdability -- 指定游标在事务结束时是保持打开还是关闭的能力- 能够检索和更新
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 类的接口,当所讨论的实例实际上是代理类时,它提供检索委托实例的能力。