更新时间:2026-07-28 GMT+08:00
分享

java.sql.Statement

java.sql.Statement是SQL语句接口。

表1 对java.sql.Statement的支持情况

方法名

返回值类型

支持JDBC4

addBatch(String sql)

void

Yes

clearBatch()

void

Yes

clearWarnings()

void

Yes

close()

void

Yes

closeOnCompletion()

void

Yes

execute(String sql)

boolean

Yes

execute(String sql, int autoGeneratedKeys)

boolean

Yes

execute(String sql, int[] columnIndexes)

boolean

Yes

execute(String sql, String[] columnNames)

boolean

Yes

executeBatch()

boolean

Yes

executeQuery(String sql)

ResultSet

Yes

executeUpdate(String sql)

int

Yes

executeUpdate(String sql, int autoGeneratedKeys)

int

Yes

executeUpdate(String sql, int[] columnIndexes)

int

Yes

executeUpdate(String sql, String[] columnNames)

int

Yes

getConnection()

Connection

Yes

getFetchDirection()

int

Yes

getFetchSize()

int

Yes

getGeneratedKeys()

ResultSet

Yes

getMaxFieldSize()

int

Yes

getMaxRows()

int

Yes

getLargeMaxRows()

long

Yes

getMoreResults()

boolean

Yes

getMoreResults(int current)

boolean

Yes

getResultSet()

ResultSet

Yes

getResultSetConcurrency()

int

Yes

getResultSetHoldability()

int

Yes

getResultSetType()

int

Yes

getQueryTimeout()

int

Yes

getUpdateCount()

int

Yes

getWarnings()

SQLWarning

Yes

isClosed()

boolean

Yes

isCloseOnCompletion()

boolean

Yes

isPoolable()

boolean

Yes

setCursorName(String name)

void

Yes

setEscapeProcessing(boolean enable)

void

Yes

setFetchDirection(int direction)

void

Yes

setMaxFieldSize(int max)

void

Yes

setMaxRows(int max)

void

Yes

setLargeMaxRows(long max)

void

Yes

setPoolable(boolean poolable)

void

Yes

setQueryTimeout(int seconds)

void

Yes

setFetchSize(int rows)

void

Yes

cancel()

void

Yes

executeLargeUpdate(String sql)

long

No

getLargeUpdateCount()

long

No

executeLargeBatch()

long

No

executeLargeUpdate(String sql, int autoGeneratedKeys)

long

No

executeLargeUpdate(String sql, int[] columnIndexes)

long

No

executeLargeUpdate(String sql, String[] columnNames)

long

No

enableStreamingResults()

void

Yes

  • 通过setFetchSize可以减少结果集在客户端的内存占用情况。它的原理是通过将结果集打包成游标,然后分段处理,所以会加大数据库与客户端的通信量,但会有性能损耗。
  • 由于数据库游标是事务内有效,所以,在设置setFetchSize的同时,需要将连接设置为非自动提交模式,setAutoCommit(false)。同时在业务数据需要持久化到数据库中时,在连接上执行提交操作。
  • LargeUpdate相关方法必须在JDBC4.2及以上版本使用。
  • enableStreamingResults()是开启流式读的一个自定义接口,该接口间接调用setFetchSize(Integer.MIN_VALUE)。若要开启流式读功能,需要将url中的enableStreamingQuery设置为true,同时调用setFetchSize(Integer.MIN_VALUE)或者enableStreamingResults()。除开启流式读功能外,setFetchSize()的入参只能为正数或者0。
  • 当提交模式为autocommit时,执行executeBatch前如果驱动JDBC侧将 batchMode设置为OFF,executeBatch会将整个batch展开为单独事务执行,等同于批量语句内部包含commit或者abort,执行后不支持ALT重放。
  • 打开M兼容开关,即设置连接参数mCompatible为true时支持executeLargeUpdate方法,M兼容开关请参见连接参数参考
  • setLargeMaxRows方法暂不支持设置超过Integer.MAX_VALUE长度的参数。
  • 使用getGeneratedKeys方法获取批量插入的自增值时,返回的结果是由数据库驱动根据首条自增值、自增步长以及插入的条目数决定。如果在批量插入操作中用户指定了自增列的值,那么返回的结果可能与预期的结果存在差异。

相关文档