`
jessen163
  • 浏览: 457762 次
  • 性别: 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里面void返回类型的方法。目的是完成一系列的数据处理。 存储函数:类似于Java里面非void返回类型的方法。目的是获得函数返回值。 --创建存储过程 CREATE OR REPLACE PROCEDURE first_proc IS...

    c调用java源码-HashTagCounter-Java:该存储库包含名为HashTagCounter的我的高级数据结构(ADS)最终项目。

    调用java源码HashTagCounter 运行测试用例的说明 一世。 make用于编译。 ii。 以下命令用于通过4个输入文件执行您的程序。 超时10 java hashtagcounter input_1000.txt超时10 java hashtagcounter input_10000.txt...

    Java常见面试问题整理.docx

    在JDK1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer 对象作为这块...

    Toad 使用快速入门

     可以执行匿名块,存储过程,从下方的窗口看到DBMS_OUTPUT的结果,如: 3. Stored Procedure Editor a) 打开存储过程编写器的几个途径: 单击总菜单栏上的第三个按钮:   点击Database - &gt; Procedure ...

    Java测试题1答案

    10、使用JDBC访问数据库中的存储过程,应该使用( ) 11、ServletSocket所做的工作是:( ) 三、 程序题(每题2分,有单选和多选) 1.下面的程序中哪些可以输出Hello World a. public class Hello{...

    异步并行加载工具Asyncload.zip

    基于字节码增强技术,运行时生成代理类,快速返回mock对象,后台异步进行调用通过管理和调度线程池,将后台异步调用进行加速处理,达到一个平衡点业务执行过程需要获取mock对象的真实数据时,阻塞等待原始结果返回,...

    八字java源码-Gmock:格莫克

    八字java源码转基因食品 什么是 Gmock? Mocks 用于测试 API 或接口的行为,将在被测组件中使用 当您编写原型或测试时,完全依赖真实对象通常是不可行或不明智的。 模拟对象实现与真实对象相同的接口(因此它可以...

    java笔试题算法-watset-java:Watset聚类算法在Java中的实现

    mcl和maxmax调用不同的聚类算法,而senses调用基于图的词义归纳。 有两个全局命令行参数: -i (或--input )指定输入文件的路径和-o (或--output )指定输出文件的路径。 这些参数的默认值分别为 STDIN 和 STDOUT...

    PLSQLDeveloper下载

    简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。显然,这种不关注任何实现细节的语言...

    repo-utils:用于比较包含 *.pom 和 ivy.xml 文件的两个存储库的实用程序

    使用标志-baseStorageDir路径调用存储报告模式并读取存储目录中的所有 pom 和 ivy.xml 文件。 比较模式 使用以下标志调用比较模式: -baseStorageDir path : 代表一个存储目录 -comparisonStorageDir路径:表示第二...

    网络架构师148讲视频课程

    │ 第51节:Varnishd命令和运行期参数.avi │ 第52节:Varnish的日志操作.avi │ 第53节:规划缓存大小和提高命中率.avi │ 第54节:性能调优和配置使用建议.avi │ 第55节:Nginx+Varnish组合应用.avi │ 第56节:...

    QTP下载链接.txt

    Action是QTP组织测试用例的具体形式,拥有自己的DataTable和Object Repository,支持Input和output参数。Action可以设置为share类型的,这样可以被其他test中的Action调用(注意:QTP是不支持在一个test中调用另外一...

    基于分布式数据库的图像检索系统

    DIRS: Distributed Image Retrieval System ...SortDriver.java MapReduce的运行程序,计算结果输出到hdfs的/output中 辅助 imtools.py 封装了常用的操作,例如生成路径列表 HBaseConfigure.py HBase配置

    【05-面向对象(下)】

    基本数据类型的包装类 •八大数据类型的包装类分别为:Byte、Short、Integer、Long、Character、 Float、Double、Boolean。...函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该...

    详细设计说明书

    购卡支付响应:若支付请求返回正确响应,系统查询原订单和交易记录,返回相应的卡号和密码,以短消息形式通知用户;如出现超时或数据库操作异常,系统自动发起冲正请求 3.1.2 模块设计 描述模块设计。可以用流程图...

    PL/SQL 基础.doc

    DBMS_OUTPUT.PUT_LINE(v_emp(200).id||' '||v_emp(200).lastname||' '||v_emp(200).salary); END; 注:1) id(索引) 的数目的限制由BINARY_INTEGER的范围决定(-2147483647&lt;-----&gt;2147483647); 2) TABLE类型与...

    oracle实验报告

    1、 写存储过程,显示所指定雇员名所在的部门名和位置。 CREATE OR REPLACE PROCEDURE DeptMesg(pename emp.ename%TYPE, pdname OUT dept.dname%TYPE,ploc OUT dept.loc%TYPE) AS BEGIN SELECT dname,loc INTO pd...

Global site tag (gtag.js) - Google Analytics