
# java.sql.Statement
java.sql.Statement是SQL语句接口。
表1对java.sql.Statement的支持情况 
| 方法名                                                    | 返回值类型      | 支持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      |
   
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 通过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重放。
 
