java jdbc返回多个结果集,的处理类和方法

1、处理存储过程返回单个结果集的范例:

/*****************************************************************************/
<%--
作者:何志强[hhzqq@21cn.com]
日期:2000-08-04
   2000-08-16
版本:1.1
功能:JSP数据库操作例程   -   存储过程   -   JDBC-ODBC   -   SQL   Server

SQL   Server的存储过程如下:
        create   procedure   sp_jsptest
              @yourname     varchar(50),
              @myname   varchar(50)   output
        as
              select   "您好, "+@yourname+ ",非常高兴认识您,^_^ "
              set   @myname   =   "何志强 "
              return   1
        go
--%>

<%@   page   contentType= "text/html;charset=gb2312 "%>

<%
//变量声明
java.lang.String   strName;   //姓名

//取得用户输入的数据
strName   =   request.getParameter( "name ");
if(strName==null){//用户没有输入姓名
%>

<html>
<head>
<meta   http-equiv= "Content-Type "   content= "text/html;   charset=gb2312 ">
<title> JSP数据库操作例程   -   存储过程   -   JDBC-ODBC   -   SQL   Server </title>
</head>
<body>

<form   action= "jdbc-odbc.jsp "   method= "post ">
您尊姓大名: <input   type= "text "   name= "name "   maxlength= "50 ">
<input   type= "submit "   value= "提交 ">
</form>

</body>
</html>

<%
}
else{
      //对用户输入的数据作必要的字符编码转换
      strName   =   new   java.lang.String(strName.getBytes( "iso-8859-1 "));

      //变量声明
      java.sql.Connection   sqlCon;                   //数据库连接对象
      java.sql.CallableStatement   sqlStmt;   //可调用语句对象
      java.sql.ResultSet   sqlRst;                     //结果集对象

      java.lang.String   strCon;                         //数据库连接字符串
      java.lang.String   strSQL;                         //SQL语句

      java.lang.String   strWelcome;                 //欢迎词
      java.lang.String   strMyName;                   //我的姓名
      int   intReturn;                                             //返回值

      //装载JDBC-ODBC驱动程序
      Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");

      //设置数据库连接字符串
      strCon   =   "jdbc:odbc:jspdemo ";

      //连接数据库
      sqlCon   =   java.sql.DriverManager.getConnection(strCon, "sa ", " ");

      //准备SQL语句
      strSQL   =   "{?   =   call   sp_jsptest(?,?)} ";

      //准备可调用语句对象
      sqlStmt   =   sqlCon.prepareCall(strSQL);

      //设置输入参数
      sqlStmt.setString(2,strName);

      //登记输出参数
      sqlStmt.registerOutParameter(1,java.sql.Types.INTEGER);
      sqlStmt.registerOutParameter(3,java.sql.Types.VARCHAR);

      //执行该存储过程并返回结果集
      sqlRst   =   sqlStmt.executeQuery();

      //获取来自结果集中的数据
      sqlRst.next();
      strWelcome   =   sqlRst.getString(1);

      //获取输出参数的值
      strMyName   =   sqlStmt.getString(3);

      //获取返回值
      intReturn   =   sqlStmt.getInt(1);

      //关闭记录集
      sqlRst.close();

      //关闭可调用语句对象
      sqlStmt.close();

      //关闭数据库对象
      sqlCon.close();
%>

<html>
<head>
<meta   http-equiv= "Content-Type "   content= "text/html;   charset=gb2312 ">
<title> JSP数据库操作例程   -   存储过程   -   JDBC-ODBC   -   SQL   Server </title>
</head>
<body>

<%=strWelcome%> <br>
我是 <%=strMyName%> <br>
返回值是 <%=intReturn%>

</body>
</html>

<%
}
%>
/*****************************************************************************/

 

 

 

 

Statement接口提供了三种执行SQL语句的方法:
executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。
executeQuery   方法用语返回单个结果集
execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知SQL字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。例如,用户可能执行一个已存储过程,并且该已存储过程可执行更新,然后执行选择,再进行更新,再进行选择,等等。通常使用已存储过程的人应知道它所返回的内容。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
是的,PreparedStatement可以返回多个结果。在JDBC中,PreparedStatement是预编译的SQL语句,可以在执行时传递参数,可以执行查询、更新和删除等操作。 如果SQL语句返回多个结果,可以使用PreparedStatement中的getMoreResults()方法来获取下一个结果。此方法返回一个boolean值,如果还有结果,则返回true,否则返回false。在获取下一个结果之前,必须先关闭当前的结果,以便释放相关资源。可以使用ResultSet的close()方法来关闭当前结果。 以下是一个示例代码段,演示如何使用PreparedStatement返回多个结果: ```java String sql = "SELECT * FROM table1; SELECT * FROM table2;"; PreparedStatement statement = connection.prepareStatement(sql); boolean hasMoreResults = statement.execute(); while (hasMoreResults) { ResultSet resultSet = statement.getResultSet(); while (resultSet.next()) { // 处理结果 } resultSet.close(); hasMoreResults = statement.getMoreResults(); } ``` 在此示例中,首先创建了一个包含两个SELECT语句的SQL语句。执行SQL语句时,使用PreparedStatement的execute()方法执行,返回一个boolean值,表示是否有结果。如果有结果,使用PreparedStatement的getResultSet()方法获取结果,并在内部循环中处理结果中的数据。在处理完当前结果后,调用ResultSet的close()方法关闭结果,然后使用PreparedStatement的getMoreResults()方法获取下一个结果,直到没有更多的结果为止。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值