executesql方法 数据库execute用法

语句中execute、executeUpdate和executeQuery的区别语句接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪种方法取决于SQL语句的内容。方法

本文最后更新时间:  2023-04-19 07:58:29

语句中execute、executeUpdate和executeQuery的区别

语句接口提供了三种执行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();

继续;

}

打破;//没有其他结果。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。