java.sql.Statement
java.sql.Statement是SQL语句接口。
方法名 |
返回值类型 |
支持JDBC4 |
支持计划外ALT |
---|---|---|---|
addBatch(String sql) |
void |
Yes |
Yes |
clearBatch() |
void |
Yes |
Yes |
clearWarnings() |
void |
Yes |
Yes |
close() |
void |
Yes |
Yes |
closeOnCompletion() |
void |
Yes |
Yes |
execute(String sql) |
boolean |
Yes |
Yes |
execute(String sql, int autoGeneratedKeys) |
boolean |
Yes |
Yes |
execute(String sql, int[] columnIndexes) |
boolean |
Yes |
Yes |
execute(String sql, String[] columnNames) |
boolean |
Yes |
Yes |
executeBatch() |
boolean |
Yes |
Yes |
executeQuery(String sql) |
ResultSet |
Yes |
Yes |
executeUpdate(String sql) |
int |
Yes |
Yes |
executeUpdate(String sql, int autoGeneratedKeys) |
int |
Yes |
Yes |
executeUpdate(String sql, int[] columnIndexes) |
int |
Yes |
Yes |
executeUpdate(String sql, String[] columnNames) |
int |
Yes |
Yes |
getConnection() |
Connection |
Yes |
Yes |
getFetchDirection() |
int |
Yes |
Yes |
getFetchSize() |
int |
Yes |
Yes |
getGeneratedKeys() |
ResultSet |
Yes |
Yes |
getMaxFieldSize() |
int |
Yes |
Yes |
getMaxRows() |
int |
Yes |
Yes |
getMoreResults() |
boolean |
Yes |
Yes |
getMoreResults(int current) |
boolean |
Yes |
Yes |
getResultSet() |
ResultSet |
Yes |
Yes |
getResultSetConcurrency() |
int |
Yes |
Yes |
getResultSetHoldability() |
int |
Yes |
Yes |
getResultSetType() |
int |
Yes |
Yes |
getQueryTimeout() |
int |
Yes |
Yes |
getUpdateCount() |
int |
Yes |
Yes |
getWarnings() |
SQLWarning |
Yes |
Yes |
isClosed() |
boolean |
Yes |
Yes |
isCloseOnCompletion() |
boolean |
Yes |
Yes |
isPoolable() |
boolean |
Yes |
Yes |
setCursorName(String name) |
void |
Yes |
Yes |
setEscapeProcessing(boolean enable) |
void |
Yes |
Yes |
setFetchDirection(int direction) |
void |
Yes |
Yes |
setMaxFieldSize(int max) |
void |
Yes |
Yes |
setMaxRows(int max) |
void |
Yes |
Yes |
setPoolable(boolean poolable) |
void |
Yes |
Yes |
setQueryTimeout(int seconds) |
void |
Yes |
Yes |
setFetchSize(int rows) |
void |
Yes |
Yes |
cancel() |
void |
Yes |
Yes |
executeLargeUpdate(String sql) |
long |
No |
Yes |
getLargeUpdateCount() |
long |
No |
Yes |
executeLargeBatch() |
long |
No |
Yes |
executeLargeUpdate(String sql, int autoGeneratedKeys) |
long |
No |
Yes |
executeLargeUpdate(String sql, int[] columnIndexes) |
long |
No |
Yes |
executeLargeUpdate(String sql, String[] columnNames) |
long |
No |
Yes |
enableStreamingResults() |
void |
Yes |
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重放。