网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java基本教学:线程入门.
.留言板.
.实现游戏中的文字滚屏功能.
.CDE 的目录结构.
.关于能提高Java代码可重用性的三.
.J2EE数据库设计入门.
.JavaMail常见问题之servlet 的 J.
.Tomcat 服务器Server.xml的关键参.
.在Java应用软件中加入logging.
.Java、XML与数据库编程实践 (二).
.使用JWSDP完成Web Service在java.
.使用Spring来创建一个简单的工作.
.Spring IDE 1.2.4发布.
.从TXT文件中一行一行读取数字.
.Java特效生成器──Anfy Java.
.关于JCreator Pro 3.0的一个折中.
.Java入门:理解构造器.
.用JScript实现公历到农历的日期转.
.使用WEBLOGIC PORTAL规则引.
.怎样成为优秀的软件模型设计者.

JDBC里取得Oracle存储过程动态结果集

发表日期:2008-1-5



  1. 关于Oracle和结果集
  
  其实在大多数情况下,我们并不需要从oracle存储过程里返回一个或多个结果集,除非迫不得已。
  
  假如大家用过MS SQL Server或Sybase SQL Server,那么从存储过程返回一个动态的结果集是一件非常轻易的事情,只要在存储过程结束时写上
  
  “select column1,column2,.... from table_list where condition“
  
  就可以了。
  
  但在Oracle中不能这样做. 我们必须使用Oracle Cursor.
  
  在Oracle PL/SQL中,Cursor用来返回一行或多行记录,借助Cursor,我们可以从结果集中取得所有记录.
  
  Cursor并不难,但是要从Oracle存储过程中返回结果集, 就需要用到Cursor变量,Cursor变量Oracle PL/SQL的类型是REF CURSOR, 我们只要定义了REF CURSOR 类型就可以使用Cursor变量. 比如我们可以这样定义:
  TYPE ref_cursor IS REF CURSOR;
  
  了解了Cursor以及Cursor变量,下面就介绍如何使用Cursor变量给JDBC返回结果集.
  
  2. 定义表结构
  
  在以下例子里,我们要用到一张表Hotline.
  
  Create table hotline(country varchar2(50),pno varchar2(50));
  
  3. 定义存储过程
  
  create or replace package PKG_HOTLINE istype HotlineCursorType is REF CURSOR;
  function getHotline return HotlineCursorType;
  end;
  create or replace package body PKG_HOTLINE isfunction getHotline return HotlineCursorType ishotlineCursor HotlineCursorType;
  beginopen hotlineCursor for select * from hotline;
  return hotlineCursor;
  end;
  end;
  
  在这个存储过程里,我们定义了HotlineCursorType 类型,并且在存储过程中简单地查找所有的记录并返回HotlineCursorType.
  
  4. 测试存储过程
  
  在Oracle SQL/Plus里登陆到数据库. 按以下输入就看到返回的结果集.
  
  SQL> var rs refcursor;SQL> exec :rs := PKG_HOTLINE.getHotline;SQL> print rs;
  
  5. Java调用
  
  简单地写一个Java Class.
  
  ....public void openCursor(){Connection conn = null;ResultSet rs = null;
  CallableStatement stmt = null;
  String sql = “{? = call PKG_HOTLINE.getHotline()}“;
  try{conn = getConnection();stmt = conn.prepareCall(sql);
  stmt.registerOutParameter(1,OracleTypes.CURSOR);
  stmt.execute();
  rs = ((OracleCallableStatement)stmt).getCursor(1);
  while(rs.next()){String country = rs.getString(1);
  String pno = rs.getString(2);
  System.out.println(“country:“+country+“pno:”+pno);
  }}catch(Exception ex){ex.printStackTrace();
  }finally{closeConnection(conn,rs,stmt);
  }}.....
  
  好了,大功告成.
上一篇:JDBC和Hibernate来写入Blob型数据 人气:1151
下一篇:在ADSP中配置Excel作为数据源二(组图) 人气:927
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐