Module java.sql
Package java.sql

Interface Connection

所有超级接口:
AutoCloseable, Wrapper

public interface Connection extends Wrapper, AutoCloseable

与特定数据库的连接(会话)。SQL语句在连接的上下文中执行并返回结果。

Connection对象的数据库能够提供描述其表、支持的SQL语法、存储过程、此连接的功能等信息。可以使用getMetaData方法获取这些信息。

注意: 配置Connection时,JDBC应用程序应该使用适当的Connection方法,如setAutoCommitsetTransactionIsolation。当存在JDBC方法时,应用程序不应直接调用SQL命令来更改连接的配置。默认情况下,Connection对象处于自动提交模式,这意味着它在执行每个语句后会自动提交更改。如果禁用了自动提交模式,则必须显式调用commit方法以提交更改;否则,数据库更改将不会被保存。

使用JDBC 2.1核心API创建的新Connection对象最初具有一个空的类型映射。用户可以在此类型映射中为UDT输入自定义映射。当使用ResultSet.getObject方法从数据源检索UDT时,getObject方法将检查连接的类型映射,以查看是否有该UDT的条目。如果有,则getObject方法将将UDT映射到指定的类。如果没有条目,则将使用标准映射映射UDT。

用户可以创建一个新的类型映射,这是一个java.util.Map对象,向其中插入一个条目,并将其传递给可以执行自定义映射的java.sql方法。在这种情况下,该方法将使用给定的类型映射,而不是与连接关联的类型映射。

例如,以下代码片段指定SQL类型ATHLETES将在Java编程语言中映射到类Athletes。代码片段检索Connection对象con的类型映射,将条目插入其中,然后使用新条目设置类型映射为连接的类型映射。

      java.util.Map map = con.getTypeMap();
      map.put("mySchemaName.ATHLETES", Class.forName("Athletes"));
      con.setTypeMap(map);
 
自版本:
1.1
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    表示不支持事务的常量。
    static final int
    表示阻止脏读取的常量;可以发生不可重复读取和幻像读取。
    static final int
    表示可以发生脏读取、不可重复读取和幻像读取的常量。
    static final int
    表示阻止脏读取和不可重复读取的常量;可以发生幻像读取。
    static final int
    表示阻止脏读取、不可重复读取和幻像读取的常量。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    abort(Executor executor)
    终止一个打开的连接。
    default void
    向驱动程序提示一个请求,一个独立的工作单元在此连接上开始。
    void
    清除此Connection对象报告的所有警告。
    void
    close()
    立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放。
    void
    commit()
    使自上次提交/回滚以来所做的所有更改永久化,并释放此Connection对象当前持有的任何数据库锁。
    createArrayOf(String typeName, Object[] elements)
    创建Array对象的工厂方法。
    构造一个实现Blob接口的对象。
    构造一个实现Clob接口的对象。
    构造一个实现NClob接口的对象。
    构造一个实现SQLXML接口的对象。
    为向数据库发送SQL语句创建一个Statement对象。
    createStatement(int resultSetType, int resultSetConcurrency)
    创建一个将以给定类型和并发性生成ResultSet对象的Statement对象。
    createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
    创建一个将以给定类型、并发性和可保持性生成ResultSet对象的Statement对象。
    createStruct(String typeName, Object[] attributes)
    创建Struct对象的工厂方法。
    default void
    向驱动程序提示一个请求,一个独立的工作单元在此连接上已完成。
    boolean
    检索此Connection对象的当前自动提交模式。
    检索此Connection对象的当前目录名称。
    返回包含驱动程序支持的每个客户端信息属性的名称和当前值的列表。
    返回指定名称的客户端信息属性的值。
    int
    检索使用此Connection对象创建的ResultSet对象的当前可保持性。
    检索包含有关此Connection对象表示连接的数据库的元数据的DatabaseMetaData对象。
    int
    检索驱动程序将等待数据库请求完成的毫秒数。
    检索此Connection对象的当前模式名称。
    int
    检索此Connection对象的当前事务隔离级别。
    检索与此Connection对象关联的Map对象。
    检索此Connection对象调用报告的第一个警告。
    boolean
    检索此Connection对象是否已关闭。
    boolean
    检索此Connection对象是否处于只读模式。
    boolean
    isValid(int timeout)
    如果连接尚未关闭且仍然有效,则返回true。
    将给定的SQL语句转换为系统的本机SQL语法。
    为调用数据库存储过程创建一个CallableStatement对象。
    prepareCall(String sql, int resultSetType, int resultSetConcurrency)
    创建一个将以给定类型和并发性生成ResultSet对象的CallableStatement对象。
    prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
    创建一个将以给定类型和并发性生成ResultSet对象的CallableStatement对象。
    为向数据库发送参数化SQL语句创建一个PreparedStatement对象。
    prepareStatement(String sql, int autoGeneratedKeys)
    创建一个具有检索自动生成键功能的默认PreparedStatement对象。
    prepareStatement(String sql, int[] columnIndexes)
    创建一个具有检索由给定数组指定的自动生成键功能的默认PreparedStatement对象。
    prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
    创建一个将以给定类型和并发性生成ResultSet对象的PreparedStatement对象。
    prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
    创建一个将以给定类型、并发性和可保持性生成ResultSet对象的PreparedStatement对象。
    prepareStatement(String sql, String[] columnNames)
    创建一个具有检索由给定数组指定的自动生成键功能的默认PreparedStatement对象。
    void
    从当前事务中删除指定的Savepoint及其后续Savepoint对象。
    void
    撤消当前事务中所做的所有更改,并释放此Connection对象当前持有的任何数据库锁。
    void
    rollback(Savepoint savepoint)
    撤消设置给定Savepoint对象后所做的所有更改。
    void
    setAutoCommit(boolean autoCommit)
    将此连接的自动提交模式设置为给定状态。
    void
    setCatalog(String catalog)
    设置给定目录名称,以选择此Connection对象的数据库中的一个子空间进行操作。
    void
    setClientInfo(String name, String value)
    将指定名称的客户端信息属性的值设置为指定的值。
    void
    setClientInfo(Properties properties)
    设置连接的客户端信息属性的值。
    void
    setHoldability(int holdability)
    将使用此Connection对象创建的ResultSet对象的默认可保持性更改为给定的可保持性。
    void
    setNetworkTimeout(Executor executor, int milliseconds)
    设置Connection或从Connection创建的对象等待数据库回复任何请求的最长时间。
    void
    setReadOnly(boolean readOnly)
    将此连接置于只读模式,作为提示以启用数据库优化。
    在当前事务中创建一个未命名的保存点,并返回表示它的新Savepoint对象。
    在当前事务中创建一个具有给定名称的保存点,并返回表示它的新Savepoint对象。
    void
    setSchema(String schema)
    设置要访问的给定模式名称。
    default void
    setShardingKey(ShardingKey shardingKey)
    指定要与此连接一起使用的shardingKey。
    default void
    setShardingKey(ShardingKey shardingKey, ShardingKey superShardingKey)
    指定要与此连接一起使用的shardingKey和superShardingKey。
    default boolean
    setShardingKeyIfValid(ShardingKey shardingKey, int timeout)
    设置并验证此连接的sharding key。
    default boolean
    setShardingKeyIfValid(ShardingKey shardingKey, ShardingKey superShardingKey, int timeout)
    设置并验证此连接的sharding keys。
    void
    尝试将此Connection对象的事务隔离级别更改为给定级别。
    void
    将给定的TypeMap对象安装为此Connection对象的类型映射。

    Methods declared in interface java.sql.Wrapper

    isWrapperFor, unwrap
  • Field Details

    • TRANSACTION_NONE

      static final int TRANSACTION_NONE
      表示不支持事务的常量。
      参见:
    • TRANSACTION_READ_UNCOMMITTED

      static final int TRANSACTION_READ_UNCOMMITTED
      表示可以发生脏读、不可重复读和幻读的常量。此级别允许一个事务更改的行在该行的任何更改被提交之前被另一个事务读取(“脏读”)。如果任何更改被回滚,第二个事务将检索到一个无效的行。
      参见:
    • TRANSACTION_READ_COMMITTED

      static final int TRANSACTION_READ_COMMITTED
      表示阻止脏读的常量;可以发生不可重复读和幻读。此级别仅禁止事务读取具有未提交更改的行。
      参见:
    • TRANSACTION_REPEATABLE_READ

      static final int TRANSACTION_REPEATABLE_READ
      表示阻止脏读和不可重复读的常量;可以发生幻读。此级别禁止事务读取具有未提交更改的行,还禁止一种情况,即一个事务读取一行,第二个事务更改该行,第一个事务重新读取该行,在第二次读取时获得不同的值(“不可重复读”)。
      参见:
    • TRANSACTION_SERIALIZABLE

      static final int TRANSACTION_SERIALIZABLE
      表示阻止脏读、不可重复读和幻读的常量。此级别包括在 TRANSACTION_REPEATABLE_READ 中的禁止,并进一步禁止一种情况,即一个事务读取满足 WHERE 条件的所有行,第二个事务插入满足该 WHERE 条件的行,第一个事务为相同条件重新读取,检索第二次读取中的额外“幻影”行。
      参见:
  • Method Details

    • createStatement

      Statement createStatement() throws SQLException
      创建一个用于向数据库发送 SQL 语句的 Statement 对象。通常使用 Statement 对象执行没有参数的 SQL 语句。如果同一 SQL 语句被多次执行,使用 PreparedStatement 对象可能更有效。

      使用返回的 Statement 对象创建的结果集默认为 TYPE_FORWARD_ONLY 类型,并具有 CONCUR_READ_ONLY 的并发级别。可以通过调用 getHoldability() 来确定创建的结果集的可保持性。

      返回:
      一个新的默认 Statement 对象
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
    • prepareStatement

      PreparedStatement prepareStatement(String sql) throws SQLException
      创建一个用于向数据库发送带参数的 SQL 语句的 PreparedStatement 对象。

      可以预编译具有或不具有 IN 参数的 SQL 语句,并将其存储在 PreparedStatement 对象中。然后可以使用此对象多次有效地执行此语句。

      注意:此方法针对处理受益于预编译的参数化 SQL 语句进行了优化。如果驱动程序支持预编译,方法 prepareStatement 将发送语句到数据库进行预编译。某些驱动程序可能不支持预编译。在这种情况下,直到执行 PreparedStatement 对象时,语句可能不会发送到数据库。这对用户没有直接影响;但是,它会影响哪些方法抛出某些 SQLException 对象。

      使用返回的 PreparedStatement 对象创建的结果集默认为 TYPE_FORWARD_ONLY 类型,并具有 CONCUR_READ_ONLY 的并发级别。可以通过调用 getHoldability() 来确定创建的结果集的可保持性。

      参数:
      sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
      返回:
      包含预编译的 SQL 语句的新默认 PreparedStatement 对象
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
    • prepareCall

      CallableStatement prepareCall(String sql) throws SQLException
      为调用数据库存储过程创建一个 CallableStatement 对象。 CallableStatement 对象提供了设置其 IN 和 OUT 参数的方法,以及执行对存储过程的调用的方法。

      注意:此方法针对处理存储过程调用语句进行了优化。某些驱动程序在完成方法 prepareCall 时可能会将调用语句发送到数据库;其他驱动程序可能会等到执行 CallableStatement 对象时才发送。这对用户没有直接影响;但是,它会影响哪些方法抛出某些 SQLExceptions。

      使用返回的 CallableStatement 对象创建的结果集默认为 TYPE_FORWARD_ONLY 类型,并具有 CONCUR_READ_ONLY 的并发级别。可以通过调用 getHoldability() 来确定创建的结果集的可保持性。

      参数:
      sql - 可能包含一个或多个 '?' 参数占位符的 SQL 语句。通常使用 JDBC 调用转义语法指定此语句。
      返回:
      包含预编译的 SQL 语句的新默认 CallableStatement 对象
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
    • nativeSQL

      String nativeSQL(String sql) throws SQLException
      将给定的 SQL 语句转换为系统的本机 SQL 语法。驱动程序可能在发送之前将 JDBC SQL 语法转换为其系统的本机 SQL 语法。此方法返回驱动程序将发送的语句的本机形式。
      参数:
      sql - 可能包含一个或多个 '?' 参数占位符的 SQL 语句
      返回:
      该语句的本机形式
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
    • setAutoCommit

      void setAutoCommit(boolean autoCommit) throws SQLException
      将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式,则其所有 SQL 语句将作为单独的事务执行和提交。否则,其 SQL 语句将分组为由方法 commit 或方法 rollback 终止的事务。默认情况下,新连接处于自动提交模式。

      提交发生在语句完成时。语句完成的时间取决于 SQL 语句的类型:

      • 对于 DML 语句,如 Insert、Update 或 Delete,以及 DDL 语句,语句在执行完成后即完成。
      • 对于 Select 语句,当关联的结果集关闭时,语句完成。
      • 对于 CallableStatement 对象或返回多个结果的语句,当所有关联的结果集都已关闭,并且已检索到所有更新计数和输出参数时,语句完成。

      注意:如果在事务期间调用此方法并更改了自动提交模式,则事务将被提交。如果调用 setAutoCommit 且未更改自动提交模式,则调用无效。

      参数:
      autoCommit - true 以启用自动提交模式;false 以禁用它
      抛出:
      SQLException - 如果发生数据库访问错误,在参与分布式事务时调用 setAutoCommit(true),或在关闭连接上调用此方法
      参见:
    • getAutoCommit

      boolean getAutoCommit() throws SQLException
      检索此 Connection 对象的当前自动提交模式。
      返回:
      Connection 对象的当前自动提交模式的当前状态
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
      参见:
    • commit

      void commit() throws SQLException
      使自上次提交/回滚以来所做的所有更改永久化,并释放当前由此 Connection 对象持有的任何数据库锁。仅当已禁用自动提交模式时才应使用此方法。
      抛出:
      SQLException - 如果发生数据库访问错误,在参与分布式事务时调用此方法,如果在关闭连接上调用此方法或此 Connection 对象处于自动提交模式
      参见:
    • rollback

      void rollback() throws SQLException
      撤消当前事务中所做的所有更改,并释放当前由此 Connection 对象持有的任何数据库锁。仅当已禁用自动提交模式时才应使用此方法。
      抛出:
      SQLException - 如果发生数据库访问错误,在参与分布式事务时调用此方法,如果在关闭连接上调用此方法或此 Connection 对象处于自动提交模式
      参见:
    • close

      void close() throws SQLException
      释放此Connection对象的数据库和JDBC资源,而不是等待它们自动释放。

      对已关闭的Connection对象调用close方法将不起作用。

      强烈建议应用在调用close方法之前显式提交或回滚活动事务。如果调用close方法时存在活动事务,则结果是由实现定义的。

      指定者:
      close 在接口 AutoCloseable
      抛出:
      SQLException - 如果发生数据库访问错误
    • isClosed

      boolean isClosed() throws SQLException
      检索此Connection对象是否已关闭。如果在其上调用了close方法或发生了某些致命错误,则连接已关闭。只有在调用Connection.close方法后调用此方法才能保证返回true

      通常无法调用此方法来确定与数据库的连接是有效还是无效。典型的客户端可以通过捕获尝试执行操作时可能抛出的任何异常来确定连接是否无效。

      返回:
      如果此Connection对象已关闭,则返回true;如果仍然打开,则返回false
      抛出:
      SQLException - 如果发生数据库访问错误
    • getMetaData

      DatabaseMetaData getMetaData() throws SQLException
      检索包含有关此Connection对象表示连接的数据库的元数据的DatabaseMetaData对象。元数据包括有关数据库表、其支持的SQL语法、存储过程、此连接的功能等的信息。
      返回:
      Connection对象的DatabaseMetaData对象
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
    • setReadOnly

      void setReadOnly(boolean readOnly) throws SQLException
      将此连接置于只读模式,作为提示以启用数据库优化。

      注意: 无法在事务期间调用此方法。

      参数:
      readOnly - true 启用只读模式;false 禁用只读模式
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在已关闭的连接上调用或在事务期间调用此方法
    • isReadOnly

      boolean isReadOnly() throws SQLException
      检索此Connection对象是否处于只读模式。
      返回:
      如果此Connection对象处于只读模式,则返回true;否则返回false
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
    • setCatalog

      void setCatalog(String catalog) throws SQLException
      设置给定的目录名称,以选择此Connection对象的数据库中的一个子空间进行操作。

      如果驱动程序不支持目录,则会静默忽略此请求。

      调用setCatalog对先前创建或准备的Statement对象没有影响。当调用Connection方法prepareStatementprepareCall时是否立即执行DBMS准备操作是由实现定义的。为了最大的可移植性,在创建或准备Statement之前应调用setCatalog

      参数:
      catalog - 要在其中操作的目录(此Connection对象的数据库中的子空间)的名称
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
      参见:
    • getCatalog

      String getCatalog() throws SQLException
      检索此Connection对象的当前目录名称。
      返回:
      当前目录名称,如果没有则返回null
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
      参见:
    • setTransactionIsolation

      void setTransactionIsolation(int level) throws SQLException
      尝试将此Connection对象的事务隔离级别更改为给定的级别。接口Connection中定义的常量是可能的事务隔离级别。

      注意: 如果在事务期间调用此方法,结果是由实现定义的。

      参数:
      level - 以下Connection常量之一:Connection.TRANSACTION_READ_UNCOMMITTEDConnection.TRANSACTION_READ_COMMITTEDConnection.TRANSACTION_REPEATABLE_READConnection.TRANSACTION_SERIALIZABLE。(请注意,Connection.TRANSACTION_NONE不能使用,因为它指定不支持事务。)
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在已关闭的连接上调用或给定的参数不是Connection常量之一
      参见:
    • getTransactionIsolation

      int getTransactionIsolation() throws SQLException
      检索此Connection对象的当前事务隔离级别。
      返回:
      当前事务隔离级别,将是以下常量之一:Connection.TRANSACTION_READ_UNCOMMITTEDConnection.TRANSACTION_READ_COMMITTEDConnection.TRANSACTION_REPEATABLE_READConnection.TRANSACTION_SERIALIZABLEConnection.TRANSACTION_NONE
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
      参见:
    • getWarnings

      SQLWarning getWarnings() throws SQLException
      检索由此Connection对象调用报告的第一个警告。如果有多个警告,后续警告将链接到第一个警告,并可以通过在先前检索的警告上调用SQLWarning.getNextWarning方法来检索。

      不得在已关闭的连接上调用此方法;这样做将导致抛出SQLException

      注意: 后续警告将链接到此SQLWarning。

      返回:
      第一个SQLWarning对象或null(如果没有)
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
      参见:
    • clearWarnings

      void clearWarnings() throws SQLException
      清除此Connection对象报告的所有警告。调用此方法后,方法getWarnings将返回null,直到为此Connection对象报告新警告。
      抛出:
      SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法
    • createStatement

      Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
      创建一个Statement对象,该对象将以给定的类型和并发性生成ResultSet对象。此方法与上面的createStatement方法相同,但允许覆盖默认的结果集类型和并发性。创建的结果集的可保持性可以通过调用getHoldability()来确定。
      参数:
      resultSetType - 结果集类型之一;ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE之一
      resultSetConcurrency - 并发性类型之一;ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE之一
      返回:
      将以给定类型和并发性生成ResultSet对象的新Statement对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在已关闭的连接上调用或给定的参数不是指示类型和并发性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法或不支持指定的结果集类型和结果集并发性
      自:
      1.2
    • prepareStatement

      PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
      创建一个PreparedStatement对象,该对象将以给定的类型和并发性生成ResultSet对象。此方法与上面的prepareStatement方法相同,但允许覆盖默认的结果集类型和并发性。创建的结果集的可保持性可以通过调用getHoldability()来确定。
      参数:
      sql - 一个String对象,表示要发送到数据库的SQL语句;可能包含一个或多个'?' IN参数
      resultSetType - 一个结果集类型;可以是ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE之一
      resultSetConcurrency - 一个并发类型;可以是ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE之一
      返回:
      包含预编译SQL语句的新PreparedStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接上调用,或给定的参数不是指示类型和并发性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法或不支持指定的结果集类型和结果集并发性
      自版本:
      1.2
    • prepareCall

      CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
      创建一个CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。此方法与上面的prepareCall方法相同,但允许覆盖默认的结果集类型和并发性。可以通过调用getHoldability()来确定创建的结果集的保持性。
      参数:
      sql - 一个String对象,表示要发送到数据库的SQL语句;可能包含一个或多个'?'参数
      resultSetType - 一个结果集类型;可以是ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE之一
      resultSetConcurrency - 一个并发类型;可以是ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE之一
      返回:
      包含预编译SQL语句的新CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接上调用,或给定的参数不是指示类型和并发性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法或不支持指定的结果集类型和结果集并发性
      自版本:
      1.2
    • getTypeMap

      Map<String,Class<?>> getTypeMap() throws SQLException
      检索与此Connection对象关联的Map对象。除非应用程序添加了条目,否则返回的类型映射将为空。

      在对从getTypeMap返回的Map对象进行更改后,必须调用setTypeMap,因为JDBC驱动程序可能会创建setTypeMap传递的Map对象的内部副本:

            Map<String,Class<?>> myMap = con.getTypeMap();
            myMap.put("mySchemaName.ATHLETES", Athletes.class);
            con.setTypeMap(myMap);
       
      返回:
      与此Connection对象关联的java.util.Map对象
      抛出:
      SQLException - 如果发生数据库访问错误或此方法在关闭连接上调用
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.2
      另请参阅:
    • setTypeMap

      void setTypeMap(Map<String,Class<?>> map) throws SQLException
      将给定的TypeMap对象安装为此Connection对象的类型映射。类型映射将用于自定义映射SQL结构类型和不同类型。

      在调用setMap之前,必须为TypeMap设置值,因为JDBC驱动程序可能会创建TypeMap传递的内部副本:

            Map myMap<String,Class<?>> = new HashMap<String,Class<?>>();
            myMap.put("mySchemaName.ATHLETES", Athletes.class);
            con.setTypeMap(myMap);
       
      参数:
      map - 要安装为此Connection对象的默认类型映射替代的java.util.Map对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接上调用,或给定的参数不是java.util.Map对象
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.2
      另请参阅:
    • setHoldability

      void setHoldability(int holdability) throws SQLException
      更改使用此Connection对象创建的ResultSet对象的默认保持性为给定的保持性。可以通过调用DatabaseMetaData.getResultSetHoldability()来确定ResultSet对象的默认保持性。
      参数:
      holdability - 一个ResultSet保持性常量;可以是ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT之一
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接上调用,或给定的参数不是指示保持性的ResultSet常量
      SQLFeatureNotSupportedException - 如果不支持给定的保持性
      自版本:
      1.4
      另请参阅:
    • getHoldability

      int getHoldability() throws SQLException
      检索使用此Connection对象创建的ResultSet对象的当前保持性。
      返回:
      保持性,可以是ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT之一
      抛出:
      SQLException - 如果发生数据库访问错误或此方法在关闭连接上调用
      自版本:
      1.4
      另请参阅:
    • setSavepoint

      Savepoint setSavepoint() throws SQLException
      在当前事务中创建一个未命名的保存点,并返回表示它的新Savepoint对象。

      如果在活动事务之外调用setSavepoint,则将在此新创建的保存点上启动事务。

      返回:
      新的Savepoint对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在参与分布式事务时调用,此方法在关闭连接上调用,或此Connection对象当前处于自动提交模式
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.4
      另请参阅:
    • setSavepoint

      Savepoint setSavepoint(String name) throws SQLException
      在当前事务中使用给定名称创建一个保存点,并返回表示它的新Savepoint对象。

      如果在活动事务之外调用setSavepoint,则将在此新创建的保存点上启动事务。

      参数:
      name - 包含保存点名称的String
      返回:
      新的Savepoint对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在参与分布式事务时调用,此方法在关闭连接上调用,或此Connection对象当前处于自动提交模式
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.4
      另请参阅:
    • rollback

      void rollback(Savepoint savepoint) throws SQLException
      撤消设置保存点后所做的所有更改。

      此方法仅在禁用自动提交时使用。

      参数:
      savepoint - 要回滚到的Savepoint对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在参与分布式事务时被调用,此方法在关闭连接时被调用,Savepoint对象不再有效,或者此Connection对象当前处于自动提交模式
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自从:
      1.4
      参见:
    • releaseSavepoint

      void releaseSavepoint(Savepoint savepoint) throws SQLException
      从当前事务中移除指定的Savepoint及其后续的Savepoint对象。在移除后对保存点的任何引用都将导致抛出SQLException
      参数:
      savepoint - 要移除的Savepoint对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接时被调用,或者给定的Savepoint对象不是当前事务中的有效保存点
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自从:
      1.4
    • createStatement

      Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
      创建一个Statement对象,该对象将以给定的类型、并发性和可保持性生成ResultSet对象。此方法与上面的createStatement方法相同,但允许覆盖默认的结果集类型、并发性和可保持性。
      参数:
      resultSetType - 以下ResultSet常量之一:ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE
      resultSetConcurrency - 以下ResultSet常量之一:ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE
      resultSetHoldability - 以下ResultSet常量之一:ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT
      返回:
      一个新的Statement对象,该对象将以给定的类型、并发性和可保持性生成ResultSet对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接时被调用,或者给定的参数不是指示类型、并发性和可保持性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法,或者此方法不支持指定的结果集类型、结果集可保持性和结果集并发性
      自从:
      1.4
      参见:
    • prepareStatement

      PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
      创建一个PreparedStatement对象,该对象将以给定的类型、并发性和可保持性生成ResultSet对象。

      此方法与上面的prepareStatement方法相同,但允许覆盖默认的结果集类型、并发性和可保持性。

      参数:
      sql - 要发送到数据库的SQL语句的String对象;可能包含一个或多个'?' IN参数
      resultSetType - 以下ResultSet常量之一:ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE
      resultSetConcurrency - 以下ResultSet常量之一:ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE
      resultSetHoldability - 以下ResultSet常量之一:ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT
      返回:
      一个新的PreparedStatement对象,包含预编译的SQL语句,将以给定的类型、并发性和可保持性生成ResultSet对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接时被调用,或者给定的参数不是指示类型、并发性和可保持性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法,或者此方法不支持指定的结果集类型、结果集可保持性和结果集并发性
      自从:
      1.4
      参见:
    • prepareCall

      CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
      创建一个CallableStatement对象,该对象将以给定的类型和并发性生成ResultSet对象。此方法与上面的prepareCall方法相同,但允许覆盖默认的结果集类型、结果集并发性类型和可保持性。
      参数:
      sql - 要发送到数据库的SQL语句的String对象;可能包含一个或多个'?'参数
      resultSetType - 以下ResultSet常量之一:ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE
      resultSetConcurrency - 以下ResultSet常量之一:ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE
      resultSetHoldability - 以下ResultSet常量之一:ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT
      返回:
      一个新的CallableStatement对象,包含预编译的SQL语句,将以给定的类型、并发性和可保持性生成ResultSet对象
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接时被调用,或者给定的参数不是指示类型、并发性和可保持性的ResultSet常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法,或者此方法不支持指定的结果集类型、结果集可保持性和结果集并发性
      自从:
      1.4
      参见:
    • prepareStatement

      PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException
      创建一个默认的PreparedStatement对象,具有检索自动生成键的能力。给定的常量告诉驱动程序是否应该使自动生成的键可用于检索。如果SQL语句不是INSERT语句,或者是能够返回自动生成键的SQL语句(此类语句的列表是特定于供应商的),则此参数将被忽略。

      注意: 此方法针对处理受益于预编译的参数化SQL语句进行了优化。如果驱动程序支持预编译,方法prepareStatement将发送语句到数据库进行预编译。某些驱动程序可能不支持预编译。在这种情况下,直到执行PreparedStatement对象时,语句才可能被发送到数据库。这对用户没有直接影响;但是,它会影响哪些方法引发某些SQLExceptions。

      使用返回的PreparedStatement对象创建的结果集默认为类型TYPE_FORWARD_ONLY,并具有CONCUR_READ_ONLY的并发级别。可以通过调用getHoldability()来确定创建的结果集的可保持性。

      参数:
      sql - 可能包含一个或多个'?' IN参数占位符的SQL语句
      autoGeneratedKeys - 一个指示是否应返回自动生成键的标志;为Statement.RETURN_GENERATED_KEYSStatement.NO_GENERATED_KEYS之一
      返回:
      一个新的PreparedStatement对象,包含预编译的SQL语句,将具有返回自动生成键的能力
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在关闭连接时被调用,或者给定的参数不是指示是否应返回自动生成键的Statement常量
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持具有常量Statement.RETURN_GENERATED_KEYS的此方法
      自从:
      1.4
    • prepareStatement

      PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException
      创建一个默认的PreparedStatement对象,能够返回由给定数组指定的自动生成的键。该数组包含目标表中包含应该提供的自动生成键的列的索引。如果SQL语句不是INSERT语句,或者是能够返回自动生成键的SQL语句(此类语句的列表是特定于供应商的),驱动程序将忽略该数组。

      可以预编译带有或不带有IN参数的SQL语句,并将其存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行此语句。

      注意:此方法针对处理受益于预编译的参数化SQL语句进行了优化。如果驱动程序支持预编译,方法prepareStatement将向数据库发送语句以进行预编译。某些驱动程序可能不支持预编译。在这种情况下,直到执行PreparedStatement对象,语句才可能不会发送到数据库。这对用户没有直接影响;但是,它会影响哪些方法引发某些SQLException。

      使用返回的PreparedStatement对象创建的结果集默认为TYPE_FORWARD_ONLY类型,并具有CONCUR_READ_ONLY并发级别。可以通过调用getHoldability()来确定创建的结果集的可保持性。

      参数:
      sql - 可能包含一个或多个'?' IN参数占位符的SQL语句
      columnIndexes - 一个包含应从插入的行或行返回的列的索引的数组
      返回:
      一个新的PreparedStatement对象,包含预编译的语句,能够返回由给定列索引数组指定的自动生成的键
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自:
      1.4
    • prepareStatement

      PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
      创建一个默认的PreparedStatement对象,能够返回由给定数组指定的自动生成的键。该数组包含目标表中包含应该返回的自动生成键的列的名称。如果SQL语句不是INSERT语句,或者是能够返回自动生成键的SQL语句(此类语句的列表是特定于供应商的),驱动程序将忽略该数组。

      可以预编译带有或不带有IN参数的SQL语句,并将其存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行此语句。

      注意:此方法针对处理受益于预编译的参数化SQL语句进行了优化。如果驱动程序支持预编译,方法prepareStatement将向数据库发送语句以进行预编译。某些驱动程序可能不支持预编译。在这种情况下,直到执行PreparedStatement对象,语句才可能不会发送到数据库。这对用户没有直接影响;但是,它会影响哪些方法引发某些SQLException。

      使用返回的PreparedStatement对象创建的结果集默认为TYPE_FORWARD_ONLY类型,并具有CONCUR_READ_ONLY并发级别。可以通过调用getHoldability()来确定创建的结果集的可保持性。

      参数:
      sql - 可能包含一个或多个'?' IN参数占位符的SQL语句
      columnNames - 一个包含应从插入的行或行返回的列的名称的数组
      返回:
      一个新的PreparedStatement对象,包含预编译的语句,能够返回由给定列名称数组指定的自动生成的键
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭连接上调用此方法
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自:
      1.4
    • createClob

      Clob createClob() throws SQLException
      构造一个实现Clob接口的对象。返回的对象最初不包含数据。可以使用Clob接口的setAsciiStreamsetCharacterStreamsetString方法向Clob添加数据。
      返回:
      一个实现Clob接口的对象
      抛出:
      SQLException - 如果无法构造实现Clob接口的对象,或者在关闭连接上调用此方法,或者发生数据库访问错误。
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自:
      1.6
    • createBlob

      Blob createBlob() throws SQLException
      构造一个实现Blob接口的对象。返回的对象最初不包含数据。可以使用Blob接口的setBinaryStreamsetBytes方法向Blob添加数据。
      返回:
      一个实现Blob接口的对象
      抛出:
      SQLException - 如果无法构造实现Blob接口的对象,或者在关闭连接上调用此方法,或者发生数据库访问错误。
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自:
      1.6
    • createNClob

      NClob createNClob() throws SQLException
      构造一个实现NClob接口的对象。返回的对象最初不包含数据。可以使用NClob接口的setAsciiStreamsetCharacterStreamsetString方法向NClob添加数据。
      返回:
      一个实现NClob接口的对象
      抛出:
      SQLException - 如果无法构造实现NClob接口的对象,或者在关闭连接上调用此方法,或者发生数据库访问错误。
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自:
      1.6
    • createSQLXML

      SQLXML createSQLXML() throws SQLException
      构造一个实现SQLXML接口的对象。返回的对象最初不包含数据。可以使用SQLXML接口的createXmlStreamWriter对象和setString方法向SQLXML对象添加数据。
      返回:
      一个实现SQLXML接口的对象
      抛出:
      SQLException - 如果无法构造实现SQLXML接口的对象,或者在关闭连接上调用此方法,或者发生数据库访问错误。
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自:
      1.6
    • isValid

      boolean isValid(int timeout) throws SQLException
      如果连接尚未关闭且仍然有效,则返回true。当调用此方法时,驱动程序应在连接上提交查询或使用其他机制来积极验证连接仍然有效。

      驱动程序提交用于验证连接的查询应在当前事务的上下文中执行。

      参数:
      timeout - 等待数据库操作完成的时间(以秒为单位)。如果超时时间在操作完成之前到期,则此方法返回false。值为0表示不对数据库操作应用超时。
      返回:
      如果连接有效,则返回true;否则返回false
      抛出:
      SQLException - 如果为timeout提供的值小于0
      自:
      1.6
      参见:
    • setClientInfo

      void setClientInfo(String name, String value) throws SQLClientInfoException
      设置指定名称的客户端信息属性的值为指定的值。

      应用程序可以使用DatabaseMetaData.getClientInfoProperties方法来确定驱动程序支持的客户端信息属性以及每个属性可以指定的最大长度。

      驱动程序将指定的值存储在数据库中的适当位置。例如,在特殊寄存器、会话参数或系统表列中。为了效率,驱动程序可能会推迟将值设置到数据库中,直到下次执行或准备语句时。除了将客户端信息存储在数据库中的适当位置之外,这些方法不会以任何方式更改连接的行为。这些方法提供的值仅用于会计、诊断和调试目的。

      如果驱动程序不识别指定的客户端信息名称,则驱动程序将生成警告。

      如果此方法指定的值大于属性的最大长度,则驱动程序可以截断该值并生成警告,或生成SQLClientInfoException。如果驱动程序生成SQLClientInfoException,则未在连接上设置指定的值。

      以下是标准的客户端信息属性。驱动程序不必支持这些属性,但如果驱动程序支持可以由标准属性之一描述的客户端信息属性,则应使用标准属性名称。

      • ApplicationName - 当前正在使用连接的应用程序的名称
      • ClientUser - 使用连接的应用程序为其执行工作的用户的名称。这可能与建立连接时使用的用户名不同。
      • ClientHostname - 使用连接的应用程序所在计算机的主机名。
      参数:
      name - 要设置的客户端信息属性的名称
      value - 要将客户端信息属性设置为的值。如果值为null,则清除指定属性的当前值。
      抛出:
      SQLClientInfoException - 如果数据库服务器在设置数据库服务器上的客户端信息值时返回错误,或者在关闭的连接上调用此方法
      自版本:
      1.6
    • setClientInfo

      void setClientInfo(Properties properties) throws SQLClientInfoException
      设置连接的客户端信息属性的值。 Properties对象包含要设置的客户端信息属性的名称和值。属性列表中包含的客户端信息属性集替换连接上的当前客户端信息属性集。如果当前设置在连接上的属性不在属性列表中,则清除该属性。指定空属性列表将清除连接上的所有属性。有关更多信息,请参见setClientInfo (String, String)

      如果设置任何客户端信息属性时发生错误,则会抛出SQLClientInfoExceptionSQLClientInfoException包含指示未设置哪些客户端信息属性的信息。客户端信息的状态是未知的,因为一些数据库不允许原子地设置多个客户端信息属性。对于这些数据库,在发生错误之前可能已设置一个或多个属性。

      参数:
      properties - 要设置的客户端信息属性列表
      抛出:
      SQLClientInfoException - 如果数据库服务器在设置数据库服务器上的客户端信息值时返回错误,或者在关闭的连接上调用此方法
      自版本:
      1.6
      另请参见:
    • getClientInfo

      String getClientInfo(String name) throws SQLException
      返回指定名称的客户端信息属性的值。如果指定的客户端信息属性尚未设置且没有默认值,则此方法可能返回null。如果驱动程序不支持指定的客户端信息属性名称,则此方法还将返回null。

      应用程序可以使用DatabaseMetaData.getClientInfoProperties方法来确定驱动程序支持的客户端信息属性。

      参数:
      name - 要检索的客户端信息属性的名称
      返回:
      指定客户端信息属性的值
      抛出:
      SQLException - 如果数据库服务器在从数据库中获取客户端信息值时返回错误,或者在关闭的连接上调用此方法
      自版本:
      1.6
      另请参见:
    • getClientInfo

      Properties getClientInfo() throws SQLException
      返回包含驱动程序支持的每个客户端信息属性的名称和当前值的列表。如果客户端信息属性的值尚未设置且没有默认值,则客户端信息属性的值可能为null。
      返回:
      包含驱动程序支持的每个客户端信息属性的名称和当前值的Properties对象。
      抛出:
      SQLException - 如果数据库服务器在从数据库中获取客户端信息值时返回错误,或者在关闭的连接上调用此方法
      自版本:
      1.6
    • createArrayOf

      Array createArrayOf(String typeName, Object[] elements) throws SQLException
      创建Array对象的工厂方法。

      注意:当使用createArrayOf创建映射到原始数据类型的数组对象时,Array对象是该原始数据类型的数组还是Object数组是由实现定义的。

      注意:JDBC驱动程序负责将Object数组的元素映射到给定Object类的java.sql.Types中定义的默认JDBC SQL类型。默认映射在JDBC规范的附录B中指定。如果生成的JDBC类型不是给定typeName的适当类型,则由实现定义是抛出SQLException还是驱动程序支持生成的转换。

      参数:
      typeName - 数组元素映射到的类型的SQL名称。typeName是数据库特定的名称,可以是此数据库支持的内置类型的名称、用户定义类型的名称或标准SQL类型的名称。这是由Array.getBaseTypeName返回的值
      elements - 填充返回对象的元素
      返回:
      其元素映射到指定SQL类型的Array对象
      抛出:
      SQLException - 如果发生数据库错误,JDBC类型不适合于typeName且不支持转换,typeName为null或在关闭的连接上调用此方法
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自版本:
      1.6
    • createStruct

      Struct createStruct(String typeName, Object[] attributes) throws SQLException
      创建Struct对象的工厂方法。
      参数:
      typeName - 此Struct对象映射到的SQL结构化类型的SQL类型名称。typeName是为此数据库定义的用户定义类型的名称。它是由Struct.getSQLTypeName返回的值。
      attributes - 填充返回对象的属性
      返回:
      映射到给定SQL类型并填充给定属性的Struct对象
      抛出:
      SQLException - 如果发生数据库错误,typeName为null或在关闭的连接上调用此方法
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此数据类型
      自版本:
      1.6
    • setSchema

      void setSchema(String schema) throws SQLException
      设置要访问的模式名称。

      如果驱动程序不支持模式,则会静默忽略此请求。

      调用setSchema对先前创建或准备的Statement对象没有影响。当调用Connection方法prepareStatementprepareCall时,DBMS是否立即执行准备操作是由实现定义的。为了最大可移植性,应在创建或准备Statement之前调用setSchema

      参数:
      schema - 要工作的模式的名称
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭的连接上调用此方法
      自版本:
      1.7
      另请参见:
    • getSchema

      String getSchema() throws SQLException
      检索此Connection对象的当前模式名称。
      返回:
      当前模式名称,如果没有则为null
      抛出:
      SQLException - 如果发生数据库访问错误或在关闭的连接上调用此方法
      自版本:
      1.7
      另请参见:
    • abort

      void abort(Executor executor) throws SQLException
      终止一个打开的连接。调用abort的结果是:
      • 将连接标记为关闭
      • 关闭到数据库的任何物理连接
      • 释放连接使用的资源
      • 确保当前访问连接的任何线程要么完成进度,要么抛出SQLException

      调用abort会标记连接为关闭并释放任何资源。在已关闭的连接上调用abort是一个空操作。

      中止和释放连接持有的资源可能需要较长时间。当abort方法返回时,连接将被标记为关闭,并且作为参数传递给abort的Executor可能仍在执行释放资源的任务。

      此方法在允许方法继续之前检查是否存在SQLPermission对象。如果存在SecurityManager并且其checkPermission方法拒绝调用abort,此方法将抛出java.lang.SecurityException

      参数:
      executor - 将被abort使用的Executor实现。
      抛出:
      SQLException - 如果发生数据库访问错误或executornull
      SecurityException - 如果存在安全管理器并且其checkPermission方法拒绝调用abort
      自版本:
      1.7
      参见:
    • setNetworkTimeout

      void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException
      设置Connection或从Connection创建的对象等待数据库回复任何一个请求的最长时间。如果任何请求仍未得到回复,等待方法将返回一个SQLException,并且Connection或从Connection创建的对象将被标记为关闭。除了closeisClosedConnection.isValid方法之外,对对象的任何后续使用都将导致SQLException

      注意:此方法旨在解决一种罕见但严重的情况,即网络分区可能导致发出JDBC调用的线程在套接字读取中无法中断地挂起,直到操作系统TCP超时(通常为10分钟)。此方法与提供管理员线程一种方法来释放任何这种线程的abort()方法相关联,前提是JDBC连接对管理员线程可访问。 setNetworkTimeout方法将涵盖没有管理员线程或管理员线程无法访问连接的情况。此方法的影响严重,应该给予足够高的值,以便在任何更正常的超时之前永远不会触发,例如事务超时。

      JDBC驱动程序实现也可以选择支持setNetworkTimeout方法,以在没有网络的环境中对数据库响应时间施加限制。

      驱动程序可能会在内部使用多个内部驱动程序-数据库传输来实现其API调用的某些或全部部分,由驱动程序实现确定限制是否始终应用于API调用的响应,或者应用于API调用期间进行的任何单个请求。

      此方法可以被多次调用,例如为JDBC代码区域设置限制,并在退出该区域时重置为默认值。调用此方法对已经存在的请求没有影响。

      Statement.setQueryTimeout()超时值独立于setNetworkTimeout指定的超时值。如果查询超时在网络超时之前到期,则语句执行将被取消。如果网络仍处于活动状态,则结果将是语句和连接仍然可用。但是,如果查询超时在网络超时之前到期,或者如果由于网络问题语句超时失败,则连接将被标记为关闭,连接持有的任何资源将被释放,并且连接和语句都将不可用。

      当驱动程序确定setNetworkTimeout超时值已过期时,JDBC驱动程序将标记连接为关闭并释放连接持有的任何资源。

      此方法在允许方法继续之前检查是否存在SQLPermission对象。如果存在SecurityManager并且其checkPermission方法拒绝调用setNetworkTimeout,此方法将抛出java.lang.SecurityException

      参数:
      executor - 将被setNetworkTimeout使用的Executor实现。
      milliseconds - 等待数据库操作完成的时间(以毫秒为单位)。如果JDBC驱动程序不支持毫秒,则JDBC驱动程序将将值四舍五入到最接近的秒。如果操作在超时期间未完成,则将抛出SQLException。值为0表示数据库操作没有超时。
      抛出:
      SQLException - 如果发生数据库访问错误,此方法在已关闭的连接上调用,executornull,或为seconds指定的值小于0。
      SecurityException - 如果存在安全管理器并且其checkPermission方法拒绝调用setNetworkTimeout
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.7
      参见:
    • getNetworkTimeout

      int getNetworkTimeout() throws SQLException
      检索驱动程序将等待数据库请求完成的毫秒数。如果超过限制,将抛出SQLException
      返回:
      毫秒为单位的当前超时限制;零表示没有限制
      抛出:
      SQLException - 如果发生数据库访问错误或此方法在已关闭的Connection上调用
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.7
      参见:
    • beginRequest

      default void beginRequest() throws SQLException
      提示驱动程序,一个请求,一个独立的工作单元,正在此连接上开始。每个请求与连接本地状态(无论是客户端还是服务器上的状态)相互独立。在beginRequestendRequest对之间完成的工作不依赖于连接上的任何其他工作,无论是作为另一个请求的一部分还是在任何请求之外。一个请求可能包括多个事务。可能会依赖于已提交的数据库状态,因为该状态不是连接本地的。

      本地状态被定义为与当前连接相关联的任何状态,无论是在客户端还是数据库中,都无法透明地再现。

      beginRequestendRequest的调用不是嵌套的。多次调用beginRequest而没有中间调用endRequest不是错误。第一次beginRequest调用标记请求的开始,后续调用被视为无操作

      使用beginRequestendRequest是可选的,供应商特定的,并且应该在很大程度上是透明的。特别是实现可能会检测到指示依赖于其他工作的条件,例如打开事务。建议但不是必须的,如果存在活动事务并且调用了beginRequest,则实现应抛出SQLException。使用这些方法可能会提高性能或提供其他好处。请查阅供应商的文档以获取更多信息。

      建议将每个工作单元封装在beginRequestendRequest对中,以便在请求开始或结束时没有打开事务,并且没有跨请求边界的本地状态依赖。已提交的数据库状态不是本地的。

      API注释:
      此方法应由连接池管理器使用。

      连接池管理器应在将连接返回给调用者之前在基础连接上调用beginRequest

      如果:

      • 连接池缓存PooledConnection对象
      • 在应用程序调用getConnection时返回逻辑连接句柄
      • 通过在返回PooledConnection之前调用Connection.close关闭逻辑Connection
      则连接池管理器不需要调用beginRequest
      实现要求:
      默认实现是一个空操作。
      抛出:
      SQLException - 如果发生错误
      自版本:
      9
      参见:
    • endRequest

      default void endRequest() throws SQLException
      驱动程序提示请求已完成,这是一个独立的工作单元。调用beginRequestendRequest不是嵌套的。多次调用endRequest而没有调用beginRequest是不会报错的。第一次调用endRequest标记请求已完成,随后的调用将被视为无操作。如果在没有初始调用beginRequest的情况下调用endRequest,也将被视为无操作。

      此方法的确切行为是特定于供应商的。特别是实现可能会检测到指示对其他工作的依赖性的条件,例如打开的事务。建议但不是必须的,如果存在活动事务并且调用了endRequest,则实现应抛出SQLException

      API 注意:
      此方法应由连接池管理器使用。

      当应用程序将连接返回到连接池时,连接池管理器应在基础连接上调用endRequest

      如果连接池满足以下条件,则连接池管理器不需要调用endRequest

      • 连接池缓存PooledConnection对象
      • 应用程序调用getConnection时返回逻辑连接句柄
      • 在将PooledConnection返回到缓存之前通过调用Connection.close关闭逻辑Connection
      实现要求:
      默认实现是无操作。
      抛出:
      SQLException - 如果发生错误
      自版本:
      9
      参见:
    • setShardingKeyIfValid

      default boolean setShardingKeyIfValid(ShardingKey shardingKey, ShardingKey superShardingKey, int timeout) throws SQLException
      设置和验证此连接的分片键。分片键可以指定为null值。 null分片键的有效性是特定于供应商的。有关更多信息,请参阅供应商的文档。
      API 注意:
      此方法验证分片键对Connection是否有效。超时值指示驱动程序在setShardingKeyIfValid返回false之前应等待Connection验证分片键的有效性的时间。
      实现要求:
      默认实现将抛出SQLFeatureNotSupportedException
      参数:
      shardingKey - 要针对此连接验证的分片键。分片键可以是null
      superShardingKey - 要针对此连接验证的超级分片键。超级分片键可以是null
      timeout - 预期完成验证过程之前的秒数,否则将中止验证过程。值为0表示验证过程不会超时。
      返回:
      如果连接有效且分片键在此连接上有效且设置,则返回true;如果分片键无效或超时期限在操作完成之前到期,则返回false。
      抛出:
      SQLException - 如果执行此验证时发生错误;在未指定shardingKey的情况下指定了superShardingKey;在关闭的connection上调用了此方法;或timeout值为负数。
      SQLFeatureNotSupportedException - 如果驱动程序不支持分片
      自版本:
      9
      参见:
    • setShardingKeyIfValid

      default boolean setShardingKeyIfValid(ShardingKey shardingKey, int timeout) throws SQLException
      设置和验证此连接的分片键。分片键可以指定为null值。 null分片键的有效性是特定于供应商的。有关更多信息,请参阅供应商的文档。
      API 注意:
      此方法验证分片键对Connection是否有效。超时值指示驱动程序在setShardingKeyIfValid返回false之前应等待Connection验证分片键的有效性的时间。
      实现要求:
      默认实现将抛出SQLFeatureNotSupportedException
      参数:
      shardingKey - 要针对此连接验证的分片键。分片键可以是null
      timeout - 预期完成验证过程之前的秒数,否则将中止验证过程。值为0表示验证过程不会超时。
      返回:
      如果连接有效且分片键有效且可在此连接上设置,则返回true;如果分片键无效或超时期限在操作完成之前到期,则返回false。
      抛出:
      SQLException - 如果执行此验证时发生错误;在关闭的connection上调用了此方法;或timeout值为负数。
      SQLFeatureNotSupportedException - 如果驱动程序不支持分片
      自版本:
      9
      参见:
    • setShardingKey

      default void setShardingKey(ShardingKey shardingKey, ShardingKey superShardingKey) throws SQLException
      指定要在此连接中使用的分片键和超级分片键
      API 注意:
      此方法设置指定的分片键,但不需要与数据库进行往返以验证分片键对Connection是否有效。
      实现要求:
      默认实现将抛出SQLFeatureNotSupportedException
      参数:
      shardingKey - 要在此连接上设置的分片键。分片键可以是null
      superShardingKey - 要在此连接上设置的超级分片键。超级分片键可以是null
      抛出:
      SQLException - 如果设置分片键时发生错误;在关闭的connection上调用了此方法;或指定了superShardingKey而没有指定shardingKey
      SQLFeatureNotSupportedException - 如果驱动程序不支持分片
      自版本:
      9
      参见:
    • setShardingKey

      default void setShardingKey(ShardingKey shardingKey) throws SQLException
      指定要在此连接中使用的分片键
      API 注意:
      此方法设置指定的分片键,但不需要与数据库进行往返以验证分片键对Connection是否有效。
      实现要求:
      默认实现将抛出SQLFeatureNotSupportedException
      参数:
      shardingKey - 要在此连接上设置的分片键。分片键可以是null
      抛出:
      SQLException - 如果设置分片键时发生错误;或在关闭的connection上调用了此方法
      SQLFeatureNotSupportedException - 如果驱动程序不支持分片
      自版本:
      9
      参见: