java.sql.Statement
java.sql.Statement是SQL语句接口。
| 方法名 | 返回值类型 | 支持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方法获取批量插入的自增值时,返回的结果是由数据库驱动根据首条自增值、自增步长以及插入的条目数决定。如果在批量插入操作中用户指定了自增列的值,那么返回的结果可能与预期的结果存在差异。