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接口 - 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接口 - 指定将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
  • DriverManager添加了drivers方法,以返回当前加载和可用的JDBC驱动程序的流
  • 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中引入

  • 池化语句 -- 重复使用与池化连接关联的语句
  • 保存点 -- 允许将事务回滚到指定的保存点
  • ConnectionPoolDataSource定义的属性 -- 指定连接如何进行池化
  • PreparedStatement对象参数的元数据
  • 从自动生成列中检索值的能力
  • 能够同时从CallableStatement对象返回的多个ResultSet对象
  • 能够通过名称和索引标识CallableStatement对象的参数
  • ResultSet可保持性 -- 能够指定游标在事务结束时是保持打开还是关闭
  • 能够检索和更新Ref对象引用的SQL结构化类型实例
  • 能够以编程方式更新BLOBCLOBARRAYREF值。
  • 添加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结构化类型或SQL DISTINCT 类型是可以自定义映射的UDT。以下三个步骤设置了自定义映射:
  1. 在SQL中定义SQL结构化类型或DISTINCT类型
  2. 在Java编程语言中定义SQL UDT将映射到的类。此类必须实现SQLData接口。
  3. 在包含两个内容的Connection对象的类型映射中进行条目设置:
    • UDT的完全限定SQL名称
    • 实现SQLData接口的类的Class对象

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

包规范

  • Class
    Description
    Java编程语言中对SQL类型ARRAY的映射。
    在批量更新操作期间发生错误时抛出的SQLException子类。
    Java编程语言中对SQL BLOB值的表示(映射)。
    用于执行SQL存储过程的接口。
    枚举,用于表示无法通过调用Connection.setClientInfo设置属性的原因状态。
    Java编程语言中对SQL CLOB类型的映射。
    与特定数据库的连接(会话)。
    DataSource对象创建的构建器,用于建立与数据源对象表示的数据库的连接。
    关于整个数据库的全面信息。
    当数据值由于超出MaxFieldSize以外的原因意外截断时,抛出作为DataTruncation异常(写入时)或报告为DataTruncation警告(读取时)的异常。
    围绕毫秒值的薄包装,允许JDBC将其识别为SQL DATE值。
    每个驱动程序类必须实现的接口。
    Driver希望被DriverManager通知时必须实现的接口。
    用于管理一组JDBC驱动程序的基本服务。
    用于建立连接的驱动程序属性。
    用于标识通用SQL类型(称为JDBC类型)的常量。
    Java编程语言中对SQL NCLOB类型的映射。
    用于获取PreparedStatement对象中每个参数标记的类型和属性信息的对象。
    表示预编译SQL语句的对象。
    伪/隐藏列使用的枚举。
    Ref
    Java编程语言中对SQL REF值的表示(映射),它是数据库中SQL结构化类型值的引用。
    表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
    用于获取ResultSet对象中列的类型和属性信息的对象。
    Java编程语言中对SQL ROWID值的表示(映射)。
    RowId生命周期值的枚举。
    保存点的表示,它是当前事务中可以从Connection.rollback方法引用的点。
    用于指示此对象表示分片键的接口。
    DataSourceXADataSource对象创建的构建器,用于创建具有支持的数据类型子键的ShardingKey
    当一个或多个客户端信息属性无法在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.setQueryTimeoutDriverManager.setLoginTimeoutDataSource.setLoginTimeoutXADataSource.setLoginTimeout指定的超时已过期时抛出的SQLException子类。
    当SQLState类值为'40'或在供应商指定条件下抛出的SQLException子类。
    当SQLState类值为'08'或在供应商指定条件下抛出的SQLException子类。
    在先前失败的操作可能在无需应用级功能干预的情况下重试操作时可能成功时抛出的SQLException子类。
    用于标识通用SQL类型(称为JDBC类型或供应商特定数据类型)的对象。
    提供有关数据库访问警告的异常。
    JavaTM编程语言中对SQL XML类型的映射。
    用于执行静态SQL语句并返回其产生的结果的对象。
    Java编程语言中对SQL结构化类型的标准映射。
    围绕java.util.Date类的薄包装,允许JDBC API将其识别为SQL TIME值。
    围绕java.util.Date的薄包装,允许JDBC API将其识别为SQL TIMESTAMP值。
    定义用于标识通用SQL类型(称为JDBC类型)的常量的类。
    为提供代理类实例的JDBC类提供检索代理实例的能力的接口。