语句中execute、executeUpdate和executeQuery的区别语句接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪种方法取决于SQL语句的内容。方法
语句接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪种方法取决于SQL语句的内容。
方法执行查询
用于生成单个结果集的语句,如SELECT语句。ExecuteQuery是最广泛使用的执行SQL语句的方法。该方法用于执行SELECT语句,这几乎是使用最多的SQL语句。
方法执行更新
用于执行INSERT、UPDATE或DELETE语句和SQL DDL(数据定义语言)语句,如CREATE TABLE和DROP TABLE。INSERT、UPDATE或DELETE语句的作用是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,表示受影响的行数(即更新计数)。对于不操作行的语句,如CREATE TABLE或DROP TABLE,executeUpdate的返回值始终为零。
使用executeUpdate方法是因为createTableCoffees中的SQL语句是DDL(数据定义语言)语句。创建表、更改表和删除表都是DDL语句的例子,应该由executeUpdate方法执行。从它的名字也可以看出,方法executeUpdate也用于执行更新表的SQL语句。实际上,executeUpdate更新表比创建表花费更多的时间,因为表只需要创建一次,但是经常更新。
方法执行:
用于执行返回多个结果集、多个更新计数或两者组合的语句。因为大部分程序员不需要这个高级功能。
只有当语句可以返回多个ResultSet对象、多个更新计数或ResultSet对象和更新计数的组合时,才应该使用execute方法。当执行存储过程或动态执行未知的SQL字符串时(也就是说,在编译时应用程序的程序员是未知的),可能会出现多个结果,尽管这种情况很少发生。
因为execute方法处理非常规的情况,所以获得结果需要一些特殊的处理就不足为奇了。例如,如果已知某个过程返回两个结果集,则在使用execute方法执行该过程后,必须调用getResultSet方法来获取第一个结果集,然后调用适当的getXXX方法来获取值。要获得第二个结果集,需要首先调用getMoreResults方法,然后调用getResultSet方法。如果已知一个过程返回两个更新计数,首先调用方法getUpdateCount,然后调用getMoreResults,再次调用getUpdateCount。
对于不知道返回内容的人来说,情况就比较复杂了。如果结果是ResultSet对象,execute方法返回true;如果结果是Java int,则返回false。如果返回int,则意味着结果是更新的计数或者执行的语句是DDL命令。调用execute方法后要做的第一件事是调用getResultSet或getUpdateCount。两个或多个ResultSet对象中的第一个可以通过调用getResultSet方法获得;或者调用getUpdateCount方法来获取两次或更多次更新计数中第一次更新计数的内容。
当SQL语句的结果不是结果集时,方法getResultSet将返回null。这可能意味着结果是更新的计数或者没有其他结果。在这种情况下,判断null真正含义的唯一方法是调用getUpdateCount方法,该方法将返回一个整数。该整数是受调用语句影响的行数;如果为-1,则结果为结果集或无结果。如果方法getResultSet返回null(表示结果不是ResultSet对象),返回值-1表示没有其他结果。即当以下条件为真时,没有结果(或没有其他结果):
((stmt . get resultset()= = null)&& amp(stmt.getUpdateCount() == -1))
如果调用了getResultSet方法,并且处理了它返回的ResultSet对象,则需要调用getMoreResults方法来确定是否有其他结果集或更新计数。如果getMoreResults返回true,则需要再次调用getResultSet来检索下一个结果集。如上所述,如果getResultSet返回null,则需要调用getUpdateCount来检查null是指示结果是更新计数还是没有其他结果。
当getMoreResults返回false时,表示SQL语句返回更新计数或没有其他结果。因此,需要调用getUpdateCount方法来检查是哪种情况。在这种情况下,当下列条件为真时,意味着没有其他结果:
((stmt . getmoresults()= = false)&& amp(stmt.getUpdateCount() == -1))
下面的代码演示了一种方法,用于确认通过调用execute方法生成的所有结果集和更新计数都已被访问:
stmt . execute(querystringwithnunknown results);
while (true) {
int rowCount = stmt . getupdatecount();
if(rowCount >0) {//它是更新计数
system . out . println(“更改的行数= ”+计数);
stmt . getmoresults();
继续;
}
If (rowCount == 0) {// DDL命令或0更新
system . out . println(”未更改任何行或语句是DDL
命令”);
stmt . getmoresults();
继续;
}
//在这里执行,证明有结果集
/或者没有其他结果。
ResultSet rs = stmt.getResultSet
如果(rs!= null) {
....//使用元数据获取有关结果集列的信息
while (rs.next()) {
....//处理结果
stmt . getmoresults();
继续;
}
打破;//没有其他结果。