`

java调用存储过程,并返回多个结果集

阅读更多

项目需要,并返回结果集和另一个状态,此前未使用过存储过程,故作以记录:

sql代码:

 

-- Create table
create table JYXT_HDBM
(
  ID      VARCHAR2(50),
  MID     VARCHAR2(50),
  ORDERNO VARCHAR2(50),
  HDTYPE  VARCHAR2(2),
  MONEY   NUMBER default 0.0,
  PAYTYPE VARCHAR2(2),
  TIME    DATE,
  STATUS  VARCHAR2(2),
  REMARKS VARCHAR2(200)
)

INSERT INTO jyxt_hdbm
  (ID, mid, orderno, hdtype, money, paytype, TIME, status, remarks)
VALUES
  (v_id, v_mid, v_orderno, v_hdtype, v_money, v_paytype, v_time, v_status, v_remarks);


--创建包,声明游标、存储过程
create or replace package users_package is
         type search_results is ref cursor;   
         PROCEDURE users_proc(results_out out search_results, hdtype  IN OUT VARCHAR);   
end users_package;
 


--创建(实例化)存储过程
create or replace package body users_package is
   procedure users_proc (results_out out search_results, hdtype IN OUT  VARCHAR)   
              is   
              begin 
               dbms_output.put_line('start....');   
              if hdtype is not null then   
                  open results_out for select t.orderno,t.money,t.hdtype FROM jyxt_hdbm t WHERE t.hdtype=hdtype; 
                  hdtype:='单项活动';
              else   
                  open results_out for select t.orderno,t.money,t.hdtype FROM jyxt_hdbm t; 
                  hdtype:='所有活动';
              end if;   
                dbms_output.put_line('end!!!!!');   
          END users_proc;   
 end users_package;

 

---pl sql  测试调用 
declare
cur_search_results jy.users_package.search_results;
CURSOR myCur is select t.orderno,t.money,t.hdtype FROM jyxt_hdbm t;
hdbmrow myCur%ROWTYPE ; --要保证行里的字段与游标里的行字段一致
hdtype VARCHAR(10);
BEGIN
 hdtype:='';
  jy.users_package.users_proc(cur_search_results, hdtype);
 -- OPEN cur_search_results;
  dbms_output.put_line(hdtype); 
  LOOP
    FETCH cur_search_results into hdbmrow;     --游标中查询出来的一行into进定义的变量hdbmrow中
    EXIT WHEN cur_search_results%NOTFOUND;
    dbms_output.put_line(hdbmrow.orderno||'    ' ||hdbmrow.money||'    ' ||hdbmrow.hdtype);   
    
  END LOOP;

   CLOSE cur_search_results;
END;

 

jsp代码(只摘录了核心代码):

 

 

   try{
			String type = ToolKit.dealNull(request.getParameter("type"));
			DataSource ds = GlobalParameter.getDataSource_User();
			Connection conn = ds.getConnection();
			
			String sql = "{call users_package.users_proc(?, ?)}";
            CallableStatement cstmt = conn.prepareCall(sql);
            cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
            
            /* 第二个参数,定义了in out类型的参数,所以做以下设置*/
            cstmt.setString(2,type);
            cstmt.registerOutParameter(2, Types.VARCHAR);
            
            cstmt.execute();
            ResultSet  rs = null;
            
            //获取游标结果集
            rs = ((oracle.jdbc.OracleCallableStatement)cstmt).getCursor(1); 
            
            
            //获取字符弄返回参数        	
            String  str = cstmt.getString(2);
            
            out.println("---------"+str+"---------</br>");
             
            //处理返回游标
            while(rs.next()){
				out.print("  订单号:"+rs.getString (1)); 
			  	out.print("  金额:"+rs.getDouble(2)); 
			    out.print("  类型:"+rs.getString (3)); 
			    out.println("</br>"); 
            }

		}catch(Exception e){
			System.out.println("error:"+e.toString());
			
		}
分享到:
评论

相关推荐

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

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

    JAVA调用存储过程

    ### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...

    java调用存储过程返回数组

    总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...

    java调用oracle存储过程并得到结果集

    Oracle存储过程可以返回多个结果集,因此我们需要使用`CallableStatement`而不是`PreparedStatement`。调用存储过程的语法是`{call procedure_name(参数列表)}`。例如: ```java CallableStatement cs = connection....

    Oracle存储过程返回结果集

    当需要从存储过程中返回多个结果时,通常会使用结果集。本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在...

    java 调用存储过程返回单个值

    ### 二、调用存储过程返回单个值的步骤 #### 2.1 准备工作 首先,确保已正确配置数据库连接。这通常涉及到以下几点: - 加载合适的JDBC驱动程序。 - 建立到数据库的连接。 #### 2.2 创建存储过程 假设我们有一个名...

    java调用存储过程

    下面将详细介绍如何在MyEclipse中使用Java调用存储过程,并探讨相关的知识点。 1. **存储过程概述** 存储过程是预编译的SQL语句集合,存储在数据库服务器中,可以被多次调用,以提高执行效率。它们允许开发者封装...

    java调用oracle存储过程或者函数

    如果需要调用多个存储过程或函数,可以使用`CallableStatement.addBatch()`方法将多个调用语句添加到批处理队列,然后用`CallableStatement.executeBatch()`一次性执行,提高效率。 六、性能优化 1. 使用连接池:...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    Java调用数据库存储过程[mysql测试通过]

    本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...

    Java调用存储过程

    有些存储过程可能返回多个结果集,可以使用`ResultSetMetaData`获取元数据,`nextSet()`方法移动到下一个结果集,`wasNull()`检查上一个结果集中是否返回了NULL值。 总结起来,Java调用存储过程涉及的关键点包括: ...

    java调用存储过程小结.pdf

    Java 调用存储过程的优点是可以减少应用程序中的等待时间,因为存储过程运行在 DBMS 自身,而不是在 Java 代码中执行多个 SQL 语句。这样可以戏剧性地优化性能。同时,存储过程也可以从很多流行的 DBMS 中免费使用,...

    Oracle 返回多个结果集

    在Oracle数据库中,返回多个结果集是一个常见的需求,特别是在处理复杂的查询或存储过程时。一个结果集通常对应于SQL查询的执行结果,但有时我们可能需要在一个操作中获取并处理多个独立的结果集。这就涉及到了...

    Java实现调用MySQL存储过程详解

    首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro_user`都是在`book`数据库中的存储过程。你可以使用MySQL命令行客户端或者可视化工具(如MySQL...

    Java对存储过程的调用方法

    在Java编程中,调用数据库中的存储...总的来说,Java调用存储过程涉及到了JDBC API的使用,参数的设置和结果集的处理,以及可能的事务管理和连接池操作。了解和掌握这些知识,对于开发高效、稳定的数据库应用至关重要。

    java调用存储过程源码 sql数据库

    总的来说,Java调用存储过程是数据库交互的一个重要环节,理解其原理和操作流程对于开发高效、可靠的数据库应用至关重要。在实际项目中,根据具体需求选择合适的设计策略,既能保证功能实现,又能兼顾性能和维护性。

    java调用sqlserver存储过程.pdf

    存储过程可以接收多个参数,这些参数可以是输入参数、输出参数或输入/输出参数。在本例中,`InsertUser` 存储过程接收了 8 个参数,分别是 `@UserName`、`@Title`、`@Guid`、`@BirthDate`、`@Description`、`@Photo`...

    java调用Oracle存储过程的代码

    总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...

Global site tag (gtag.js) - Google Analytics