execute 使用方法

点击打开链接

使用方法 execute

  execute 方法应该仅在语句能返回多个 ResultSet 对象、多个更新计数或 ResultSet 对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。例如,用户可能执行一个已存储过程(使用 CallableStatement 对象 - 参见第 135 页的 CallableStatement),并且该已存储过程可执行更新,然后执行选择,再进行更新,再进行选择,等等。通常使用已存储过程的人应知道它所返回的内容。

  因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。

  对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet 可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。

  当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法 getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):

((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))


  如果已经调用方法 getResultSet 并处理了它返回的 ResultSet 对象,则有必要调用方法 getMoreResults 以确定是否有其它结果集或更新计数。如果 getMoreResults 返回 true,则需要再次调用 getResultSet 来检索下一个结果集。如上所述,如果 getResultSet 返回 null,则需要调用 getUpdateCount 来检查 null 是表示结果为更新计数还是表示没有其它结果。

  当 getMoreResults 返回 false 时,它表示该 SQL 语句返回一个更新计数或没有其它结果。因此需要调用方法 getUpdateCount 来检查它是哪一种情况。在这种情况下,当下列条件为真时表示没有其它结果:

((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))

  下面的代码演示了一种方法用来确认已访问调用方法 execute 所产生的全部结果集和更新计数:

stmt.execute(queryStringWithUnknownResults);
while (true) {
int rowCount = stmt.getUpdateCount();
if (rowCount > 0) { // 它是更新计数
System.out.println("Rows changed = " + count);
stmt.getMoreResults();
continue;
}
if (rowCount == 0) { // DDL 命令或 0 个更新
System.out.println(" No rows changed or statement was DDL
command");
stmt.getMoreResults();
continue;
}

// 执行到这里,证明有一个结果集
// 或没有其它结果

ResultSet rs = stmt.getResultSet;
if (rs != null) {
 . . . // 使用元数据获得关于结果集列的信息
 while ( rs
break; // 没有其它结果 
### Struts2 中 `execute` 方法使用与实现细节 在 Struts2 框架中,`execute` 方法是一个关键的部分,主要用于处理用户的请求并返回相应的视图结果。以下是关于 `execute` 方法的详细说明: #### 1. `execute` 方法的作用 `execute` 方法是 Struts2 框架中默认调用方法。当用户访问某个 URL 时,框架会根据配置文件(如 `struts.xml`)中的映射关系找到对应的 Action 类,并调用其 `execute` 方法[^2]。 #### 2. `execute` 方法的返回值 `execute` 方法的返回值通常是一个字符串,表示视图的逻辑名称(如 `"success"` 或 `"error"`)。Struts2 框架会根据返回值匹配配置文件中的 `<result>` 标签,从而跳转到指定的视图页面[^3]。 ```java public class LoginAction { public String execute() { // 执行业务逻辑 return "success"; // 返回视图逻辑名称 } } ``` #### 3. `execute` 方法的实现要求 - 如果 Action 类继承自 `ActionSupport`,则默认实现了 `execute` 方法,并返回 `"success"`。因此在这种情况下,可以不重写 `execute` 方法,只需确保 `struts.xml` 中有与 `"success"` 对应的 `<result>` 配置即可。 - 如果 Action 类没有继承 `ActionSupport`,并且未通过 `method` 属性指定其他方法,则必须显式实现 `execute` 方法,否则框架会抛出找不到方法的错误。 #### 4. 动态方法调用(DMI) 除了默认的 `execute` 方法,Struts2 还支持动态方法调用(Dynamic Method Invocation, DMI)。通过在 URL 中指定方法名,可以直接调用 Action 类中的其他方法,而无需依赖 `execute` 方法[^1]。 例如: ```xml <action name="Demo1Action_*" class="cn.itheima.b_dynamic.Demo1Action" method="{1}"> <result name="success">/hello.jsp</result> </action> ``` 在这个例子中,`{1}` 表示从 URL 中提取的第一个通配符参数,作为要调用方法名。 #### 5. 参数传递与绑定 Struts2 提供了强大的参数绑定功能,能够将请求参数自动注入到 Action 类的属性中。这使得开发者可以在 `execute` 方法中直接访问和处理这些参数[^3]。 ```java public class LoginAction { private String username; private String password; // Getter 和 Setter 方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { if ("admin".equals(username) && "123456".equals(password)) { return "success"; } else { return "error"; } } } ``` #### 6. 异常处理 Struts2 提供了全局异常处理机制,可以通过配置文件定义异常映射规则。如果 `execute` 方法中抛出异常,框架会根据映射规则跳转到指定的错误页面[^4]。 ```xml <global-results> <result name="exception">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="exception"/> </global-exception-mappings> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值