execute、executeQuery和executeUpdate之间的区别
execute
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false。也就是说如果是查询的话返回true,如果是更新或插入的话就返回false了。- 可用于执行返回多个结果集、多个更新计数或二者组合的语句。
- 调用 getResultSet 或 getUpdateCount 方法来检索结果
- 调用 getMoreResults 移动到任何后面的结果。
- 调用方法 getUpdateCount,将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。
- 若返回值为-1,且getResultSet() 已返回 null,则表是没有结果
- 当
Statement.getUpdateCount()==-1&& Statement.getMoreResults()==true
的话表明当前statement
对象正指向一个真正的结果集
- 假定已知某个过程(执行多条sql)返回两个结果集,则在使用方法 execute执行该过程后,必须调用方法getResultSet获得第一个结果集,然后调用适当的getXXX方法获取其中的值。要获得第二个结果 集,需要先调用getMoreResults方法,然后再调用getResultSet方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用getMoreResults,并再次调用getUpdateCount。1234567891011121314151617181920// int rowCount = stmt.getUpdateCount();ResultSet rs = stmt.getResultSet();//获取第一个结果集if (rs != null) {while (rs.next()) {// ...}//获取第二个结果集,必须先调用getMoreResults(),再调用getResultSet()while(stmt.getMoreResults()){if(rs.getUpdateCount()==-1){ //执行语句后返回了结果集(尽管为空)ResultSet rs = stmt.getResultSet();while (rs.next()) {// 处理结果}}else{System.out.println(rs.getUpdateCount()) // 没有返回结果集,则输出执行该某语句后所影响的数据行数(如insert、update等)}}
executeQuery
用于产生单个结果集的语句,例如 SELECT 语句。12345ResultSet resultSet = statement.executeQuery(sql);if(resultSet.next()) {bookBean.setId(resultSet.getInt("id"));// ……}executeUpdate
- 返回值是一个整数,指示受影响的行数(即更新计数
stmt.getUpdateCount();
) - 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
- 返回值是一个整数,指示受影响的行数(即更新计数
如何执行插入操作后返回自增id
|
|