//通过sqlserver exec方法调用存储过程 stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'"); //jdbc通用语法为 // stmt = conn.prepareCall("{call dbo.sp_Query_GetVehiceTimeOuts(?)}"); // stmt.setString(1, "01"); boolean hashResult = stmt.execute(); while (true) { //判断本次循环是否为数据集 if (hashResult) { System.out.println("为数据集"); ResultSet rs = stmt.getResultSet(); // Do something with resultset ... while (rs.next()){ System.out.println(rs.getString(1)); } else { System.out.println("本次不为数据集"); int updateCount = stmt.getUpdateCount(); if (updateCount == -1) { 当updateCount为-1时, 代表存储过程返回的最后一条数据集 System.out.println("最后一次"); break; // Do something with update count ... 每次判断下一个是否为了数据集 stmt.getMoreResults() 为 true表示下一次循环为数据集,false为空 hashResult = stmt.getMoreResults(); System.out.println(hashResult);
大体的逻辑就是
首先是死循环,
然后判断提交sql返回的收个数据是否为结果集,
如果是就进入结果集处理,如果不是,通过getUpdateCount方法获取下一个结果,并判断getUpdateCount结果是否为-1,-1代表最后一条结果集,当结果为-1时跳出循环,否则继续循环该段代码
                    Connection conn = JdbcUtil.getConnection();        CallableStatement stmt = null;        //通过sqlserver exec方法调用存储过程        stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'");   
				
因为sqlserver2k的官方驱动问题,一直以来用jdbc没有很好的办法取多结果,公司系统里采用的是2种方式来搞,一种是增删查改用jdbc方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果的问题进行研究。 原来在odbc中取结果的方式是 [code="java"]Connection DBConn = null; Sta...
问题描述:有时使用JDBC进行数据库查询时会返回多个结果,但是PreparedStatement方式只能接收第一个结果。 例如在SQL Server中执行sp_help 'test.student',该语句会返回至少7个结果。 1、使用PreparedStatement进行JDBC操作 public class MSSqlTest { public static void main...
加载驱动Class.forName创建数据库连接conn= DriverManager.getConnection创建处理块CallableStatement cs = conn.prepareCall放入参数prepareCall.setString执行存储过程prepareCall.execute()关闭连接无参数的存储过程 JDBC编码调用 带参数的存储过程定义 调用存储过程 特殊存储过程参数inout JDBC调用 存储过程包含多个查询结果 JDBC调用 MySQL触发器 触发器是一种数据库对象,
oracle 对于高级特性总是与众不同(我极力讨厌这一点,如果使用它的产品就要对这种产品    进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一要定用它自己    的LOB对象,所幸我还能通过LONG RAW来代替....
      一般情况下,statement执行execute后只会返回单一结果,如果想一次返回多个结果,就得用JDBC驱动的多结果处理方式。各个数据库厂商有不同的实现方式,但共同的是他们都采用存储过程来实现。 一、Oracle多结果是基于ref cursor实现的 Create table person ( Id int, name varchar2(50) ) ...
2.连接到数据库 Connection con = DriverManager.getConnection(url, user, password);3.创建statement对象 PreparedStatement statement = con.prepareStatement(sql); Statement sta
resultset 中的first()、 privious()方法本质上是对移动resultset的指针 指针是否允许移动,在创建statement的时候就已经设置好了,不设置默认只支持顺序, Statement stmt=con.createStatement(int type,int concurrency); 1、参数 :int type  ResultSet.TYPE_FORWORD...
在.net中,DataSet可以自动接收多个结果,形成DataTable数组。 使用JAVA时,也想要实现这个效果,百度一顿查找,终于找到解决的办法。 核心方法:CallableStatement     ResultSet 具体实现代码: import java.sql.CallableStatement; import java.sql.ResultSet;