//通过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时跳出循环,否则继续循环该段代码
这几天,公司重构一套erp,用到很多存储过程,但我在用jdbc调用存储过程的时候发现无法接收多个结果集(存储过程select返回的Result),而且国内很难找到解决方案,今天下午花了一下午,最后终于实现了。
因为 sqlserver 2k的官方驱动问题,一直以来用 jdbc 没有很好的办法取多结果 ,公司系统里采用的是2种方式来搞,一种是增删查改用 jdbc 方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果 的问题进行研究。 原来在odbc中取结果 的方式是 [code="java"]Connection DBConn = null; Sta...
oracle 中存储结果 一般使用的是游标,所以,一般 select 一个结果 后会保存在游标中,而 jdbc 调用 存储过程 时,只需要提取该游标即可。 需要注意的是通过 Cursor 定义的游标变量,无法做为 存储过程 的返回值,这里需要用到 自定义的游标变量,使用 "Type 游标类型名 is REF CURSOR"。 1、一般的做法是需要创建在oracle中创建包,包头是该自...
//方式一:使用SqlDataAdapter SqlDataAdapter sda = new SqlDataAdapter(); DataSet ds = new DataSet(); sda.Fill(ds);//Fill DataSet:如果结果 多个 ,对应dataset中的 多个 table
问题描述:有时使用 JDBC 进行数据库查询时会返回 多个 结果 ,但是PreparedStatement方式只能接收第一个结果 。 例如在SQL Server中执行sp_help 'test.student',该语句会返回至少7个结果 。 1、使用PreparedStatement进行 JDBC 操作 public class MSSqlTest { public static void main...
4. 通过 调用 CallableStatement对象的setXXX()方法为 存储过程 传递参数。 5. 调用 CallableStatement对象的execute()方法执行 存储过程 。 6. 通过 调用 CallableStatement对象的getXXX()方法 获取 存储过程 返回的结果。 7. 最后,关闭数据库连接对象和CallableStatement对象。 例如, 调用 一个名为my_function的 存储过程 ,该过程有两个输入参数和一个输出参数,可以使用以下Java代码: import java.sql.*; public class CallFuncDemo { public static void main(String[] args) throws SQLException { Connection conn = null; CallableStatement stmt = null; try { conn = DriverManager.getConnection(" jdbc :postgresql://localhost:5432/mydb", "username", "password"); stmt = conn.prepareCall("{? = call my_function(?, ?)}"); stmt.registerOutParameter(1, Types.INTEGER); stmt.setInt(2, 100); stmt.setInt(3, 200); stmt.execute(); int result = stmt.getInt(1); System.out.println("The result is " + result); } catch(SQLException e) { e.printStackTrace(); } finally { if(stmt != null) { stmt.close(); if(conn != null) { conn.close(); 在这个例子中,我们创建了一个数据库连接对象conn,并使用prepareCall()方法创建一个CallableStatement对象stmt来 调用 存储过程 。接着,我们使用registerOutParameter()方法为输出参数注册类型,并使用setXXX()方法为输入参数设置值。 调用 execute()方法执行 存储过程 。最后,我们使用getInt()方法 获取 输出参数的值。注意,在 调用 完毕后需要关闭数据库连接对象和CallableStatement对象。