java.sql

接口
异常
所有超级接口:
Wrapper
所有已知子接口:
CallableStatement, PreparedStatement

public interface Statement
     
extends Wrapper

用于执行静态 SQL 语句并返回它所生成结果的对象。

在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。

另请参见:
Connection.createStatement(), ResultSet

字段摘要
static int CLOSE_ALL_RESULTS
          该常量指示调用 getMoreResults 时应该关闭以前一直打开的所有 ResultSet 对象。
static int CLOSE_CURRENT_RESULT
          该常量指示调用 getMoreResults 时应该关闭当前 ResultSet 对象。
static int EXECUTE_FAILED
          该常量指示在执行批量语句时发生错误。
static int KEEP_CURRENT_RESULT
          该常量指示调用 getMoreResults 时应该关闭当前 ResultSet 对象。
static int NO_GENERATED_KEYS
          该常量指示生成的键应该不可用于获取。
static int RETURN_GENERATED_KEYS
          该常量指示生成的键应该可用于获取。
static int SUCCESS_NO_INFO
          该常量指示批量语句执行成功但不存在受影响的可用行数计数。
 
方法摘要
 void addBatch(String sql)
          将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。
 void cancel()
          如果 DBMS 和驱动程序都支持中止 SQL 语句,则取消此 Statement 对象。
 void clearBatch()
          清空此 Statement 对象的当前 SQL 命令列表。
 void clearWarnings()
          清除在此 Statement 对象上报告的所有警告。
 void close()
          立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
 boolean execute(String sql)
          执行给定的 SQL 语句,该语句可能返回多个结果。
 boolean execute(String sql, int autoGeneratedKeys)
          执行给定的 SQL 语句(该语句可能返回多个结果),并通知驱动程序所有自动生成的键都应该可用于获取。
 boolean execute(String sql, int[] columnIndexes)
          执行给定的 SQL 语句(该语句可能返回多个结果),并通知驱动程序在给定数组中指示的自动生成的键应该可用于获取。
 boolean execute(String sql, String[] columnNames)
          执行给定的 SQL 语句(该语句可能返回多个结果),并通知驱动程序在给定数组中指示的自动生成的键应该可用于获取。
 int[] executeBatch()
          将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
 ResultSet executeQuery(String sql)
          执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
 int executeUpdate(String sql)
          执行给定 SQL 语句,该语句可能为 INSERTUPDATEDELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
 int executeUpdate(String sql, int autoGeneratedKeys)
          执行给定的 SQL 语句,并用给定标志通知驱动程序由此 Statement 生成的自动生成键是否可用于获取。
 int executeUpdate(String sql, int[] columnIndexes)
          执行给定的 SQL 语句,并通知驱动程序在给定数组中指示的自动生成的键应该可用于获取。
 int executeUpdate(String sql, String[] columnNames)
          执行给定的 SQL 语句,并通知驱动程序在给定数组中指示的自动生成的键应该可用于获取。
 Connection getConnection()
          获取生成此 Statement 对象的 Connection 对象。
 int getFetchDirection()
          获取从数据库表获取行的方向,该方向是根据此 Statement 对象生成的结果集合的默认值。
 int getFetchSize()
          获取结果集合的行数,该数是根据此 Statement 对象生成的 ResultSet 对象的默认获取大小。
 ResultSet getGeneratedKeys()
          获取由于执行此 Statement 对象而创建的所有自动生成的键。
 int getMaxFieldSize()
          获取可以为此 Statement 对象所生成 ResultSet 对象中的字符和二进制列值返回的最大字节数。
 int getMaxRows()
          获取由此 Statement 对象生成的 ResultSet 对象可以包含的最大行数。
 boolean getMoreResults()
          移动到此 Statement 对象的下一个结果,如果其为 ResultSet 对象,则返回 true,并隐式关闭利用方法 getResultSet 获取的所有当前 ResultSet 对象。
 boolean getMoreResults(int current)
          将此 Statement 对象移动到下一个结果,根据给定标志指定的指令处理所有当前 ResultSet 对象;如果下一个结果为 ResultSet 对象,则返回 true
 int getQueryTimeout()
          获取驱动程序等待 Statement 对象执行的秒数。
 ResultSet getResultSet()
          以 ResultSet 对象的形式获取当前结果。
 int getResultSetConcurrency()
          获取此 Statement 对象生成的 ResultSet 对象的结果集合并发性。
 int getResultSetHoldability()
          获取此 Statement 对象生成的 ResultSet 对象的结果集合可保存性。
 int getResultSetType()
          获取此 Statement 对象生成的 ResultSet 对象的结果集合类型。
 int getUpdateCount()
          以更新计数的形式获取当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回 -1。
 SQLWarning getWarnings()
          获取此 Statement 对象上的调用报告的第一个警告。
 boolean isClosed()
          获取是否已关闭了此 Statement 对象。
 boolean isPoolable()
          返回指示 Statement 是否是可池化的值。
 void setCursorName(String name)
          将 SQL 指针名称设置为给定的 String,后续 Statement 对象的 execute 方法将使用此字符串。
 void setEscapeProcessing(boolean enable)
          将转义处理设置为开或关。
 void setFetchDirection(int direction)
          向驱动程序提供关于方向的提示,在使用此 Statement 对象创建的 ResultSet 对象中将按该方向处理行。
 void setFetchSize(int rows)
          为 JDBC 驱动程序提供一个提示,它提示此 Statement 生成的 ResultSet 对象需要更多行时应该从数据库获取的行数。
 void setMaxFieldSize(int max)
          设置此 Statement 对象生成的 ResultSet 对象中字符和二进制列值可以返回的最大字节数限制。
 void setMaxRows(int max)
          将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数。
 void setPoolable(boolean poolable)
          请求将 Statement 池化或非池化。
 void setQueryTimeout(int seconds)
          将驱动程序等待 Statement 对象执行的秒数设置为给定秒数。
 
从接口 java.sql.Wrapper 继承的方法
isWrapperFor, unwrap
 

字段详细信息

CLOSE_CURRENT_RESULT

static final int CLOSE_CURRENT_RESULT
该常量指示调用 getMoreResults 时应该关闭当前 ResultSet 对象。

从以下版本开始:
1.4
另请参见:
常量字段值

KEEP_CURRENT_RESULT

static final int KEEP_CURRENT_RESULT
该常量指示调用 getMoreResults 时应该关闭当前 ResultSet 对象。

从以下版本开始:
1.4
另请参见:
常量字段值

CLOSE_ALL_RESULTS

static final int CLOSE_ALL_RESULTS
该常量指示调用 getMoreResults 时应该关闭以前一直打开的所有 ResultSet 对象。

从以下版本开始:
1.4
另请参见:
常量字段值

SUCCESS_NO_INFO

static final int SUCCESS_NO_INFO
该常量指示批量语句执行成功但不存在受影响的可用行数计数。

从以下版本开始:
1.4
另请参见:
常量字段值

EXECUTE_FAILED

static final int EXECUTE_FAILED
该常量指示在执行批量语句时发生错误。

从以下版本开始:
1.4
另请参见:
常量字段值

RETURN_GENERATED_KEYS

static final int RETURN_GENERATED_KEYS
该常量指示生成的键应该可用于获取。

从以下版本开始:
1.4
另请参见:
常量字段值

NO_GENERATED_KEYS

static final int NO_GENERATED_KEYS
该常量指示生成的键应该不可用于获取。

从以下版本开始:
1.4
另请参见:
常量字段值
方法详细信息

executeQuery

ResultSet executeQuery(String sql)
                       throws SQLException
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

参数:
sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
返回:
包含给定查询所生成数据的 ResultSet 对象;永远不能为 null
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容

executeUpdate

int executeUpdate(String sql)
                  throws SQLException
执行给定 SQL 语句,该语句可能为 INSERTUPDATEDELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。

参数:
sql - SQL 数据操作语言(Data Manipulation Language,DML)语句,如 INSERTUPDATEDELETE;或者不返回任何内容的 SQL 语句,如 DDL 语句。
返回:
(1) 对于 SQL 数据操作语言 (DML) 语句,返回行计数 (2) 对于什么都不返回的 SQL 语句,返回 0
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者给定的 SQL 语句生成 ResultSet 对象

close

void close()
           throws SQLException
立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。一般来说,使用完后立即释放资源是一个好习惯,这样可以避免对数据库资源的占用。

在已经关闭的 Statement 对象上调用 close 方法无效。

注:关闭 Statement 对象时,还将同时关闭其当前的 ResultSet 对象(如果有)。

抛出:
SQLException - 如果发生数据库访问错误

getMaxFieldSize

int getMaxFieldSize()
                    throws SQLException
获取可以为此 Statement 对象所生成 ResultSet 对象中的字符和二进制列值返回的最大字节数。此限制仅应用于 BINARYVARBINARYLONGVARBINARYCHARVARCHARNCHARNVARCHARLONGNVARCHARLONGVARCHAR 列。如果超过了该限制,则直接丢弃多出的数据。

返回:
存储字符和二进制值的列的当前列大小限制;0 表示没有任何限制
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
setMaxFieldSize(int)

setMaxFieldSize

void setMaxFieldSize(int max)
                     throws SQLException
设置此 Statement 对象生成的 ResultSet 对象中字符和二进制列值可以返回的最大字节数限制。此限制仅应用于 BINARYVARBINARYLONGVARBINARYCHARVARCHARNCHARNVARCHARLONGNVARCHARLONGVARCHAR 字段。如果超过了该限制,则直接丢弃多出的数据。为了获得最大的可移植性,应该使用大于 256 的值。

参数:
max - 以字节为单位的新列大小限制;0 表示没有任何限制
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 max >= 0
另请参见:
getMaxFieldSize()

getMaxRows

int getMaxRows()
               throws SQLException
获取由此 Statement 对象生成的 ResultSet 对象可以包含的最大行数。如果超过了此限制,则直接撤消多出的行。

返回:
由此 Statement 对象生成的 ResultSet 对象的当前最大行数;0 表示不存在任何限制
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
setMaxRows(int)

setMaxRows

void setMaxRows(int max)
                throws SQLException
将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数。如果超过了该限制,则直接撤消多出的行。

参数:
max - 新的最大行数限制;0 表示没有任何限制
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 max >= 0
另请参见:
getMaxRows()

setEscapeProcessing

void setEscapeProcessing(boolean enable)
                         throws SQLException
将转义处理设置为开或关。如果转义扫描为开启(默认值),则驱动程序在将 SQL 语句发送到数据库之前执行转义替换。注:因为准备的语句通常在进行此调用之前解析,所以对 PreparedStatements 对象禁用转义处理无效。

参数:
enable - 为 true 表示启用转义处理;为 false 表示禁用转义处理
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法

getQueryTimeout

int getQueryTimeout()
                    throws SQLException
获取驱动程序等待 Statement 对象执行的秒数。如果超过该限制,则抛出 SQLException

返回:
以秒为单位的当前查询超时限制;0 表示不存在任何限制
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
setQueryTimeout(int)

setQueryTimeout

void setQueryTimeout(int seconds)
                     throws SQLException
将驱动程序等待 Statement 对象执行的秒数设置为给定秒数。如果超过该限制,则抛出 SQLException。JDBC 驱动程序必须将此限制应用于 executeexecuteQueryexecuteUpdate 方法。JDBC 驱动程序实现也可以将此限制应用于 ResultSet 方法(有关详细信息,请参考驱动程序供应商文档)。

参数:
seconds - 以秒为单位的查询超时限制;0 表示没有任何限制
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 seconds >= 0
另请参见:
getQueryTimeout()

cancel

void cancel()
            throws SQLException
如果 DBMS 和驱动程序都支持中止 SQL 语句,则取消此 Statement 对象。一个线程可以使用此方法取消另一个线程正在执行的语句。

抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法

getWarnings

SQLWarning getWarnings()
                       throws SQLException
获取此 Statement 对象上的调用报告的第一个警告。后续的 Statement 对象警告将链接到此 SQLWarning 对象上。

每次(重新)执行语句时,都会自动清除警告链。不可以在关闭的 Statement 对象上调用此方法,这样做将导致抛出 SQLException

注:如果要处理 ResultSet 对象,则与该 ResultSet 对象上的读操作相关联的所有警告都链接到它上面,而不是链接到生成它的 Statement 对象上。

返回:
第一个 SQLWarning 对象;如果不存在任何警告,则返回 null
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法

clearWarnings

void clearWarnings()
                   throws SQLException
清除在此 Statement 对象上报告的所有警告。调用此方法后,在为此 Statement 对象报告新的警告之前, getWarnings 方法将一直返回 null

抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法

setCursorName

void setCursorName(String name)
                   throws SQLException
将 SQL 指针名称设置为给定的 String,后续 Statement 对象的 execute 方法将使用此字符串。然后,可以在 SQL 位置更新或删除语句中使用该名称来标识由此语句生成的 ResultSet 对象中的当前行。如果数据库不支持位置更新/删除,则此方法为无操作 (noop)。为了确保指针具有支持更新的适当隔离级别,指针的 SELECT 语句的形式应该为 SELECT FOR UPDATE。如果 FOR UPDATE 不存在,则位置更新可能失败。

注:按照定义,位置更新和删除必须由生成的用于放置的 ResultSet 对象之外的某个 Statement 对象来执行。此外,在连接中指针名称还必须是唯一的。

参数:
name - 新指针名称,该名称在连接中必须是唯一的
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法

execute

boolean execute(String sql)
                throws SQLException
执行给定的 SQL 语句,该语句可能返回多个结果。在某些(不常见)情形下,单个 SQL 语句可能返回多个结果集合和/或更新计数。这一点通常可以忽略,除非正在 (1) 执行已知可能返回多个结果的存储过程或者 (2) 动态执行未知 SQL 字符串。

execute 方法执行 SQL 语句并指示第一个结果的形式。然后,必须使用方法 getResultSetgetUpdateCount 来获取结果,使用 getMoreResults 来移动后续结果。

参数:
sql - 任何 SQL 语句
返回:
如果第一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回 false
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
getResultSet(), getUpdateCount(), getMoreResults()

getResultSet

ResultSet getResultSet()
                       throws SQLException
ResultSet 对象的形式获取当前结果。每个结果只应调用一次此方法。

返回:
ResultSet 对象的形式返回当前结果;如果结果是更新计数或没有更多的结果,则返回 null
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
execute(java.lang.String)

getUpdateCount

int getUpdateCount()
                   throws SQLException
以更新计数的形式获取当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回 -1。每个结果只应调用一次此方法。

返回:
以更新计数的形式返回当前结果;如果当前结果为 ResultSet 对象或没有更多结果,则返回 -1
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
execute(java.lang.String)

getMoreResults

boolean getMoreResults()
                       throws SQLException
移动到此 Statement 对象的下一个结果,如果其为 ResultSet 对象,则返回 true,并隐式关闭利用方法 getResultSet 获取的所有当前 ResultSet 对象。

当以下表达式为 true 时没有更多结果:

     // stmt is a Statement object
     ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))
 

返回:
如果下一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或不存在更多结果,则返回 false
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
execute(java.lang.String)

setFetchDirection

void setFetchDirection(int direction)
                       throws SQLException
向驱动程序提供关于方向的提示,在使用此 Statement 对象创建的 ResultSet 对象中将按该方向处理行。默认值为 ResultSet.FETCH_FORWARD

注意,此方法为此 Statement 对象生成的结果集合设置默认获取方向。每个结果集合都具有它自己用于获取和设置其自身获取方向的方法。

参数:
direction - 用于处理行的初始方向
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者给定的方向不是 ResultSet.FETCH_FORWARDResultSet.FETCH_REVERSEResultSet.FETCH_UNKNOWN 之一
从以下版本开始:
1.2
另请参见:
getFetchDirection()

getFetchDirection

int getFetchDirection()
                      throws SQLException
获取从数据库表获取行的方向,该方向是根据此 Statement 对象生成的结果集合的默认值。如果此 Statement 对象没有通过调用方法 setFetchDirection 设置获取方向,则返回值是特定于实现的。

返回:
根据此 Statement 对象生成的结果集合的默认获取方向
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
从以下版本开始:
1.2
另请参见:
setFetchDirection(int)

setFetchSize

void setFetchSize(int rows)
                  throws SQLException
为 JDBC 驱动程序提供一个提示,它提示此 Statement 生成的 ResultSet 对象需要更多行时应该从数据库获取的行数。指定的行数仅影响使用此语句创建的结果集合。如果指定的值为 0,则忽略该提示。默认值为 0。

参数:
rows - 要获取的行数
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 rows >= 0
从以下版本开始:
1.2
另请参见:
getFetchSize()

getFetchSize

int getFetchSize()
                 throws SQLException
获取结果集合的行数,该数是根据此 Statement 对象生成的 ResultSet 对象的默认获取大小。如果此 Statement 对象没有通过调用方法 setFetchSize 设置获取大小,则返回值是特定于实现的。

返回:
根据此 Statement 对象生成的结果集合的默认获取大小
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
从以下版本开始:
1.2
另请参见:
setFetchSize(int)

getResultSetConcurrency

int getResultSetConcurrency()
                            throws SQLException
获取此 Statement 对象生成的 ResultSet 对象的结果集合并发性。

返回:
ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
从以下版本开始:
1.2

getResultSetType

int getResultSetType()
                     throws SQLException
获取此 Statement 对象生成的 ResultSet 对象的结果集合类型。

返回:
ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE 之一
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
从以下版本开始:
1.2

addBatch

void addBatch(String sql)
              throws SQLException
将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。

参数:
sql - 通常此参数为 SQL INSERTUPDATE 语句
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者驱动程序不支持批量更新
从以下版本开始:
1.2
另请参见:
executeBatch(), DatabaseMetaData.supportsBatchUpdates()

clearBatch

void clearBatch()
                throws SQLExcept