`
jessen163
  • 浏览: 465444 次
  • 性别: Icon_minigender_1
  • 来自: 潘多拉
社区版块
存档分类
最新评论

java调用存储过程返回结果集和output参数

阅读更多
存储过程:   返回一个结果集和两个output参数
Create  PROCEDURE  proTest 
( 
    @sql varchar(8000)= ' ',   
    @RecordCount  int = 0  output,
    @PageCount  int = 1  output
)as 
begin     
    exec(@sql)   
    set @PageCount = 1               
    set @RecordCount = 100 
end 


public static void execute(Connection con){
  try {
  CallableStatement cstmt = con.prepareCall("{call proTest(?,?,?)}");
  cstmt.setString(1, "select * from temp");
  cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
  cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
  ResultSet rs = cstmt.executeQuery();//记录集获取到后,把rs记录集循环取出后或者调用cstmt.getMoreResults()方法后,sqlserver才会处理output返回值,否则回抛出java.sql.SQLException:Output parameters have not yet been processed. Call getMoreResults()异常
  while(rs.next){
  system.out.println(rs.getString(1));
  }
  /**或者用
  rs.getMoreResults()
  System.out.println("PageCount : " + cstmt.getInt(2)); //不会抛出异常
  System.out.println("RecordCount : " + cstmt.getInt(3));*/
  }
  catch (Exception e){
  e.printStackTrace();
  }
}



<二>java调用mysql存储过程返回多个结果集
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MainClass {
 public static void main(String[] args) throws SQLException {
  Connection conn = null;
  CallableStatement comm = null;
  ResultSet ds = null;
  String commStr = "";
  String content = "";

  String dbUrl = "jdbc:mysql://localhost:3306/mydb1";
  String theUser = "root";
  String thePw = "root";

  try {
   Class.forName("com.mysql.jdbc.Driver").newInstance();

   conn = (Connection) DriverManager.getConnection(dbUrl, theUser,
     thePw);
   commStr = "call my_proc('2011-08-01')";
   comm = ((java.sql.Connection) conn).prepareCall(commStr);
   comm.execute();
   ds = comm.getResultSet();
   while (ds.next()) {
    if (content == "") {
     content += "结果集1:\nC1\tC2\tC3";
    }
    content += "\n" + ds.getString(1) + "\t" + ds.getInt(2) + "\t"
      + ds.getDate(3);

   }

   if (comm.getMoreResults() == true) {

    content += "\n\n结果集2:\nC1\tC3";
    ds = comm.getResultSet();

    while (ds.next()) {
     content += "\n" + ds.getString(1) + "\t" + ds.getDate(3);
    }
   }
   System.out.println(content);
  } catch (Exception e) {
  } finally {
   if (ds != null)
    ds.close();
   if (comm != null)
    comm.close();
   if (conn != null)
    conn.close();
  }
 }
}

结果集1:
C1 C2 C3
zhao 10 2011-08-15
zhao 2 2011-09-16

结果集2:
C1 C3
zhenlong 2011-08-05
zhenlong 2011-09-30


mysql存储过程如下:
DROP PROCEDURE IF EXISTS mydb1.my_proc;
CREATE PROCEDURE mydb1.`my_proc`(pDate Date)
BEGIN
 select * from table1 where c1 = 'zhao' and C3 > pDate;
 select * from table1 where c1 = 'zhenlong' and C3 > pDate;
END;

分享到:
评论

相关推荐

    java调用存储过程同时返回值和多个table

    java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集

    java调用存储过程

    #### 五、使用Java调用存储过程返回游标 最后,我们来看看如何使用Java调用返回游标的存储过程。以下是一个PostgreSQL存储过程`list_early_deaths`的例子,它返回一个游标,其中包含了所有在60岁之前去世的诗人列表...

    hibernate query调用oracle存储过程

    存储过程是预编译的SQL语句集合,可以接受参数、返回结果并执行一系列操作。函数则类似于存储过程,但必须返回一个值。在Oracle中,它们都存储在数据库中,可被多次调用,提高了代码复用性和执行效率。 在Hibernate...

    java调用存储过程资料

    下面我们将详细介绍如何使用 Java 来调用存储过程,包括不带输出参数和带有输出参数的情况。 ### 不带输出参数的存储过程 在示例的 `getsum` 存储过程中,它接受一个整数 `@n` 作为输入参数,然后计算从 1 到 `@n`...

    java 调用存储过程

    5. **获取输出参数和结果集**:如果存储过程有输出参数,可以使用`getXXX()`方法获取。如果返回结果集,可以像处理`ResultSet`一样处理。 ```java int outputValue = cs.getInt(2); ``` 6. **关闭资源**:在...

    java调用存储过程示例

    以下是一个简单的Java调用存储过程的示例代码: ```java import java.sql.*; public class ProcedureTest { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testDB"; ...

    调用存储过程(java)

    下面将详细介绍在Java中如何调用存储过程,并探讨其相关的知识点。 1. **存储过程的概念**: 存储过程是一种数据库对象,由一系列的SQL语句和控制结构组成。它们在数据库服务器上预先编译,当需要执行时,只需调用...

    mybatis调用存储过程

    存储过程是数据库中预编译的程序,由一组SQL语句组成,可以接受参数、返回结果集、执行事务控制等。存储过程的主要优点包括:提高性能(因为预编译后减少了解析时间)、提高安全(可以通过权限控制访问)、降低网络...

    JAVA&C#调用存储过程代码

    以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...

    JDBC 调用存储过程方法

    在数据库管理中,Java应用程序经常需要与数据库进行交互,执行SQL语句以及调用存储过程。JDBC(Java Database Connectivity)是Java平台中用于访问数据库的标准API,它提供了丰富的功能来实现这一目标。本篇文章将...

    java 调存储过程

    总结,Java调用存储过程主要涉及JDBC API的使用,CallableStatement对象的创建和配置,以及正确处理输入输出参数。理解这些知识点对于进行数据库交互的Java开发至关重要。在实际项目中,还需要考虑性能优化、事务...

    java调用Oracle存储过程

    另外,如果存储过程返回游标(结果集),可以通过`ResultSet`接口进行处理。记得检查存储过程的返回值,它通常是一个表示成功与否的状态。 在开发过程中,可以使用诸如IntelliJ IDEA或Eclipse这样的IDE进行调试,...

    Java调用存储过程.pdf

    本文将深入探讨如何利用Java语言调用SQL Server中的存储过程,包括无输出参数和带有输出参数的情况。 ### 一、Java调用无输出参数的存储过程 #### 1. 编写存储过程 首先,我们需要在SQL Server中创建一个不带输出...

    ibatis调用存储过程

    其中,`id`是方法名,`parameterType`表示没有输入参数,`resultType`则是返回结果的类型,这里我们假设存储过程返回的是一个Map。 2. **带参数的存储过程** 对于带参数的存储过程,我们需要在`&lt;select&gt;`标签内...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    在Oracle数据库中,存储过程是预编译的SQL和PL/SQL代码集合,它们可以接收输入参数、执行复杂的业务逻辑并返回结果。当需要返回的数据不仅仅是单行单列时,可以使用结构化数组来实现多行多列的结果。Java作为常用的...

    java调用ms sql 存储过程(全)

    如果存储过程返回结果集,你可以使用 `cs.getResultSet()` 来获取,并通过迭代遍历结果集进行进一步的处理。对于复杂的数据操作,可能需要使用 `ResultSetMetaData` 来获取列的信息。 在实际开发中,通常会将这些...

    Java中如何调用存储过程的代码

    以上就是使用Java调用存储过程的基本步骤。注意,这个例子是基于Oracle数据库的,不同的数据库可能有不同的语法和数据类型。如果你使用其他数据库(如MySQL、SQL Server),请查阅相应的JDBC驱动文档,了解特定的...

Global site tag (gtag.js) - Google Analytics