Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)
存储过程:
BEGIN
INSERT INTO DBO.EMP (ID,NAME) VALUES (PARA1, PARA2);
END PRO_1;
Java代码:
import java.sql.ResultSet;
public class CallProcedureTest1 {
public CallProcedureTest1() {
super();
}
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl ";
String user = "admin";
String pwd = "password";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_1(?,?) }");
cs.setString(1, "10");
cs.setString(2, "Peter");
cs.execute();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}
}
}
备注,存储过程PRO_1中用到了表EMP(ID, NAME),需事先建好
二:有返回值的存储过程(非结果集)
存储过程:
BEGIN
SELECT INTO PARA2 FROM EMP WHERE ID= PARA1;
END PRO_2;
Java代码:
public class CallProcedureTest2 {
public CallProcedureTest2() {
super();
}
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "admin";
String pwd = "password";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_2(?,?) }");
cs.setString(1, "10");
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
String name = cs.getString(2);
System.out.println("name: " + name);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}
}
}
注意:cs.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1. 建一个程序包。如下:
TYPE MY_CURSOR IS REF CURSOR;
END MYPACKAGE;
2. 建立存储过程,如下:
BEGIN
OPEN p_CURSOR FOR SELECT * FROM DBO.EMP;
END PRO_3;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
Java代码:
import java.sql.ResultSet;
public class CallProcedureTest2 {
public CallProcedureTest2() {
super();
}
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "admin";
String pwd = "password";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call DBO.PRO_3(?) }");
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
rs = (ResultSet) cs.getObject(1);
while (rs.next()) {
System.out.println("\t" + rs.getString(1) + "\t"
+ rs.getString(2) + "\t");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
}
} catch (SQLException e) {
}
}
}
}
注意:在执行前一定要先把oracle的驱动包放到class路径里,否则会报错。
转载于:https://www.cnblogs.com/icewee/articles/2019807.html
Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)相关推荐
- C#调用ORACLE存储过程返回结果集及函数
ORACLE段: 首先在ORACLE建立PACKAGE和PACKAGE BODY,将在这里面定义函数和存储过程返回结果集. 1:建立PACKAGE: CREATE OR REPLACE package ...
- Java 调用 Oracle 存储过程返回结果集
1. 建立 ref cursor 类型和过程 Sql代码 CREATE OR REPLACE PACKAGE types AS TYPE ref_cursor IS REF CURSOR; END; ...
- oracle 存储过程返回,Oracle 存储过程返回结果集 (转)
Oracle 存储过程返回结果集 (转)[@more@] 1.返回数组 (作者:/Message_Board/Send.?sendto=enhydraboy" target=_blank&g ...
- 存储过程之八-java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...
- VB调用ORACLE存储过程返回多记录集
一直没有写原创的习惯,每次都是从别的贴子拷贝过来.实在是不好意思.最近想把自己做的一个项目中所解决的问题和大家共享一下.希望对遇见这种情况的朋友有所帮助. 程序中要用到VB调用ORACLE ...
- java调用ORACLE 存储过程返回值22
存储过程代码如下: create or replace package mysp is type refcursor is ref curs ...
- c# oracle存储过程返回结果集,一个简单的实例给大家分享C#中调用oracle的存储过程...
Oracle方面 1.创建Oracle过程存储 create or replace procedure proce_test(paramin in varchar2,paramout out varc ...
- vb.net调用oracle存储过程,今天搞好了VB.NET调用Oracle存储过程返回游标的问题
代码: Public Function GetData(ByVal procDate As String) As ArrayListTry Dim conn As New Oracle.DataAcc ...
最新文章
- java交通工具的类继承代码_Java作业-交通工具继承
- 士兵杀敌(二)(线段树+树状数组)
- mysql 左连接 和全连接_mysql左连接,右连接,内连,全连
- 大厂运维必备技能:PB级数据仓库性能调优
- 计算机视觉目标检测算法总结1——简介
- A10负载均衡设备基础配置
- paip.手机时间设置不能修改灰色禁用 解决大法
- 【路径规划】基于matlab GUI A_star算法最短路径规划【含Matlab源码 633期】
- 全三轨磁条卡读写器|写卡器MSR606的驱动安装与Demo软件测试操作指南
- webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器...
- php7.4中让gd库支持jpeg格式
- ITIL问题管理流程设计
- 幼儿python编程书籍_少儿Python编程入门书籍分享
- 深度学习面试每日一题
- 一次搞定亚马逊 Used Sold as New 二手品申诉,速度 Get!
- 公司网络很慢很卡的原因分析与处理
- 51nod 1429 巧克力
- zz我们都回不去了-南大校门被拆
- 双非计算机硕士何去何从(2)
- 洛谷P3373 线段树2(乘法加法lazytag)
热门文章
- python无师自通配套资源_Python Tkinter Pack布局管理器(超级详细,看了无师自通)...
- 当代计算机技术在建筑设备中的应用,智能化建筑中计算机技术应用研究原稿(样例3)...
- java 窗口开始_Java窗口(JFrame)从零开始(3)——绝对布局
- 管道 过滤器风格 java_完成基于管道过滤器风格的KWI实现.doc
- MySQL索引效率对比_mysql下普通索引和唯一索引的效率对比
- 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
- 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...
- matlab中cell用法
- bootstrap table 分组_bootstrap-table组合表头的实现方法
- JAVA接口的访问权限_Java中访问权限-类和接口