Module java.sql
Package java.sql
package 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平台中。当这些“since”标签在JDBC API的Javadoc注释中使用时,它们表示以下内容:
- 自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
- 自1.1或没有“since”标签 - 在原始的JDBC 1.0 API中,是JDK版本1.1的一部分
注意:许多新功能是可选的;因此,驱动程序和它们支持的功能可能有所不同。在尝试使用功能之前,始终检查驱动程序的文档,以查看它是否支持该功能。
注意:类SQLPermission
是在Java 2 SDK标准版1.3版本中添加的。此类用于防止未经授权访问与DriverManager
关联的日志流,其中可能包含诸如表名、列数据等信息。
java.sql
包含的内容
java.sql
包含以下API:
- 通过
DriverManager
工具与数据库建立连接DriverManager
类 - 与驱动程序建立连接SQLPermission
类 - 在运行在安全管理器内的代码(如小程序)尝试通过DriverManager
设置日志流时提供权限Driver
接口 - 提供基于JDBC技术(“JDBC驱动程序”)注册和连接驱动程序的API;通常仅由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
接口 - 指定将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 - 向
DriverManager
添加了drivers
方法,以返回当前加载和可用的JDBC驱动程序的流 - 为
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中引入
- 池化语句 -- 重复使用与池化连接关联的语句
- 保存点 -- 允许将事务回滚到指定的保存点
- 为
ConnectionPoolDataSource
定义的属性 -- 指定连接如何进行池化 PreparedStatement
对象参数的元数据- 从自动生成列中检索值的能力
- 能够同时从
CallableStatement
对象返回的多个ResultSet
对象 - 能够通过名称和索引标识
CallableStatement
对象的参数 ResultSet
可保持性 -- 能够指定游标在事务结束时是保持打开还是关闭- 能够检索和更新
Ref
对象引用的SQL结构化类型实例 - 能够以编程方式更新
BLOB
、CLOB
、ARRAY
和REF
值。 - 添加
java.sql.Types.DATALINK
数据类型 -- 允许JDBC驱动程序访问存储在数据源外部的对象 - 添加用于检索SQL类型层次结构的元数据
java.sql
在JDBC 2.1核心API中引入的功能
- 可滚动的结果集 -- 使用
ResultSet
接口中的新方法,允许将游标移动到特定行或相对于当前位置的位置 - 批量更新
- 程序化更新 -- 使用
ResultSet
更新器方法 - 新数据类型 -- 接口映射SQL3数据类型
- 用户定义类型(UDTs)的自定义映射
- 其他功能,包括性能提示,使用字符流,对
java.math.BigDecimal
值的完整精度,额外的安全性,以及对日期、时间和时间戳值中时区的支持。
javax.sql
在JDBC 2.0可选包API中引入的功能
DataSource
接口作为建立连接的一种方式。Java命名和目录接口(JNDI)用于向命名服务注册DataSource
对象以及检索它。- 池化连接 -- 允许连接被使用和重复使用
- 分布式事务 -- 允许事务跨不同的DBMS服务器
RowSet
技术 -- 提供一种方便的处理和传递数据的方式
UDTs的自定义映射
在SQL中定义的用户定义类型(UDT)可以映射到Java编程语言中的类。SQL结构化类型或SQLDISTINCT
类型是可以自定义映射的UDT。以下三个步骤设置了自定义映射:
- 在SQL中定义SQL结构化类型或
DISTINCT
类型 - 在Java编程语言中定义SQL UDT将映射到的类。此类必须实现
SQLData
接口。 - 在包含两个内容的
Connection
对象的类型映射中进行条目设置:- UDT的完全限定SQL名称
- 实现
SQLData
接口的类的Class
对象
对于UDT,当这些设置就位时,调用ResultSet.getObject
或CallableStatement.getObject
方法将自动检索其自定义映射。此外,PreparedStatement.setObject
方法将自动将对象映射回其SQL类型以将其存储在数据源中。
包规范
相关文档
- 教程:JDBC基础(Java教程 > JDBC数据库访问)
- “JDBC API教程与参考,第三版”
-
ClassDescriptionJava编程语言中对SQL类型
ARRAY
的映射。在批量更新操作期间发生错误时抛出的SQLException
子类。Java编程语言中对SQLBLOB
值的表示(映射)。用于执行SQL存储过程的接口。枚举,用于表示无法通过调用Connection.setClientInfo
设置属性的原因状态。Java编程语言中对SQLCLOB
类型的映射。与特定数据库的连接(会话)。从DataSource
对象创建的构建器,用于建立与数据源
对象表示的数据库的连接。关于整个数据库的全面信息。当数据值由于超出MaxFieldSize
以外的原因意外截断时,抛出作为DataTruncation
异常(写入时)或报告为DataTruncation
警告(读取时)的异常。围绕毫秒值的薄包装,允许JDBC将其识别为SQLDATE
值。每个驱动程序类必须实现的接口。当Driver
希望被DriverManager
通知时必须实现的接口。用于管理一组JDBC驱动程序的基本服务。用于建立连接的驱动程序属性。用于标识通用SQL类型(称为JDBC类型)的常量。Java编程语言中对SQLNCLOB
类型的映射。用于获取PreparedStatement
对象中每个参数标记的类型和属性信息的对象。表示预编译SQL语句的对象。伪/隐藏列使用的枚举。Java编程语言中对SQLREF
值的表示(映射),它是数据库中SQL结构化类型值的引用。表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。用于获取ResultSet
对象中列的类型和属性信息的对象。Java编程语言中对SQL ROWID值的表示(映射)。RowId生命周期值的枚举。保存点的表示,它是当前事务中可以从Connection.rollback
方法引用的点。用于指示此对象表示分片键的接口。当一个或多个客户端信息属性无法在Connection
上设置时抛出的SQLException
子类。用于将SQL用户定义类型(UDT)自定义映射到Java编程语言中类的接口。当SQLState类值为'22'或在供应商指定条件下抛出的SQLException
子类。提供有关数据库访问错误或其他错误的异常。当SQLState类值为'0A'(值为'零' A)时抛出的SQLException
子类。包含表示SQL结构化类型实例或SQL不同类型实例的值流的输入流。当SQLState类值为'23'或在供应商指定条件下抛出的SQLException
子类。当SQLState类值为'28'或在供应商指定条件下抛出的SQLException
子类。当SQLState类值为'08'或在供应商指定条件下抛出的SQLException
子类。当同一操作的重试将失败,除非SQLException
的原因得到纠正时抛出的SQLException
子类。用于将用户定义类型的属性写回数据库的输出流。当启用SecurityManager
的应用程序调用DriverManager.deregisterDriver
方法、DriverManager.setLogWriter
方法、DriverManager.setLogStream
(已弃用)方法、SyncFactory.setJNDIContext
方法、SyncFactory.setLogger
方法、Connection.setNetworkTimeout
方法或Connection.abort
方法时,SecurityManager
将检查的权限。在先前失败的操作可能在应用程序执行一些恢复步骤并重试整个事务或在分布式事务的情况下,事务分支时可能成功的情况下抛出的SQLException
子类。当SQLState类值为'42'或在供应商指定条件下抛出的SQLException
子类。当由Statement.setQueryTimeout
、DriverManager.setLoginTimeout
、DataSource.setLoginTimeout
、XADataSource.setLoginTimeout
指定的超时已过期时抛出的SQLException
子类。当SQLState类值为'40'或在供应商指定条件下抛出的SQLException
子类。当SQLState类值为'08'或在供应商指定条件下抛出的SQLException
子类。在先前失败的操作可能在无需应用级功能干预的情况下重试操作时可能成功时抛出的SQLException
子类。用于标识通用SQL类型(称为JDBC类型或供应商特定数据类型)的对象。提供有关数据库访问警告的异常。JavaTM编程语言中对SQL XML类型的映射。用于执行静态SQL语句并返回其产生的结果的对象。Java编程语言中对SQL结构化类型的标准映射。围绕java.util.Date
类的薄包装,允许JDBC API将其识别为SQLTIME
值。围绕java.util.Date
的薄包装,允许JDBC API将其识别为SQLTIMESTAMP
值。定义用于标识通用SQL类型(称为JDBC类型)的常量的类。为提供代理类实例的JDBC类提供检索代理实例的能力的接口。