为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Java调用Oracle存储过程返回查询结果集

2019-06-14 8页 doc 21KB 15阅读

用户头像

is_633423

暂无简介

举报
Java调用Oracle存储过程返回查询结果集Java调用Oracle存储过程返回查询结果集 数据采用oracle数据库scott/tiger示范账户下的emp(员工)表和dept(部门)表: create table DEPT ( DEPTNO NUMBER(2) not null pri mary key, DNAME VARCHAR2(14), LOC VARCHAR2(13) ) create table EMP ( EMPNO NUMBER(4) not null primary key, ENAME VARCHAR2(10), JOB ...
Java调用Oracle存储过程返回查询结果集
Java调用Oracle存储过程返回查询结果集 数据采用oracle数据库scott/tiger示范账户下的emp(员工)表和dept(部门)表: create table DEPT ( DEPTNO NUMBER(2) not null pri mary key, DNAME VARCHAR2(14), LOC VARCHAR2(13) ) create table EMP ( EMPNO NUMBER(4) not null primary key, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2), constraint FK_DEPTNO foreign key (DEPTNO)references DEPT (DEPT NO) ) Oracle存储过程代码: Create or replace PROCEDURE searchEmpByDept( indeptno IN NUMBER, empcur OUT sys_refcursor, errorMsg OUT varchar) IS BEGIN errorMsg:=''; OPEN empcur FOR SELECT * FROM emp WHERE deptno = indeptno ORDER BY empno; EXCEPTION WHEN OTHERS THEN errorMsg:= sqlerrm;-- sqlcode是异常编号,sqlerrm是异常的详细信息END searchEmpByDept; 使用pl/sql 过程语句测试上面的存储过程: declare errorMsg varchar(1000); empcur sys_refcursor; emp scott.emp%rowtype; begin searchEmpByDept(10,empcur, errorMsg); if errorMsg is not null then dbms_output.put_line(errorMsg); end if; loop fetch empcur into emp; EXIT WHEN empcur%notfound ; dbms_output.put_line(emp.ename); end loop; close empcur; end; Java调用代码: public class DBHelper { private Connection conn = null; public Connection getConnection() throws ClassNotFoundExcep tion, SQLException { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.1.6:1521:ntcsoft ", "scott", "tiger"); return conn; } } public class CallOracleProcedure { public static void main(String args[]) { ResultSet rs = null; CallableStatement st = null; Connection con = null; try { con = new DBHelper().getConnection(); String sql = "call searchEmpByDept(?,?,?)"; st = con.prepareCall(sql); st.setInt(1, 20);//设置入参部门编号20 //注册返回类型参数。CURSOR类型在java.sql.Tyes中没有定义,在驱动程序包中找到了 st.registerOutParameter(2, oracle.jdbc.driver.OracleTypes.C URSOR); st.registerOutParameter(3, Types.VARCHAR); boolean result = st.execute(); //获取返回参数 rs = (ResultSet) st.getObject(2); String msg = st.getString(3); if(msg != null) System.out.println(msg);//异常信息部为null则打印 System.out.println("empno" + ""t" + "ename" + ""t" + "sal " + ""t"+ "deptno"); //输出查询结果 StringBuilder output = new StringBuilder(); while (rs.next()) { output.append(rs.getInt("empno")) .append(""t") .append(rs.getString("ename")) .append(""t") .append(rs.getDouble("sal")) .append(""t") .append(rs.getInt("deptno")); System.out.println(output.toString()); output.delete(0, output.length()); } output = null; }catch (Exception e) { e.printStackTrace(); }finally{ try { if(rs!=null) rs.close(); if(st!=null) st.close(); if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 注意,oracle数据库的scott示范账户默认是被锁定的,在使用之前需要解锁: alter user scott account unlock; 然后以scott/tiger 登陆数据库服务器,会提示密码已过期,并要求你立即输入新密码。
/
本文档为【Java调用Oracle存储过程返回查询结果集】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索