java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程
一、需求
传入一个参数,返回一条或多条记录(列表)。
二、实现步骤
1. 编写Oracle存储过程。
-- 声明包和包体的语句应该分两次执行,即使声明在前定义在后,如果一起执行依然会编译出错
--调用能够返回多条记录的存储过程需要定义在包内
--声明包及包内的游标、存储过程
CREATE OR REPLACE PACKAGE pack_myPackage ISTYPE myCursorIS REF CURSOR;PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, myCursor OUT myCursor);ENDpack_myPackage;--定义包体
CREATE OR REPLACE PACKAGE BODY pack_myPackage IS
PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, outcursor OUT myCursor) IS
BEGIN
OPEN outcursor FORSELECT * FROM tableA WHERE P_NO =pNo;ENDproc_querySomeInfo;END pack_myPackage;
2. 编写Java代码
packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;/*** 存储过程测试
*
*@authoryacon*/
public classProcedureTest {public static void main(String[] args) throwsException {
String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String driverName= "oracle.jdbc.driver.OracleDriver";
String username= "scott";
String password= "tiger";
Connection conn= null;
CallableStatement cstmt= null;
ResultSet rs= null;try{
Class.forName(driverName);
conn=DriverManager.getConnection(url, username, password);
String callSql= "{call pack_myPackage.proc_getSomeInfo(?, ?) }";
cstmt=conn.prepareCall(callSql);
cstmt.setString(1, "1001");
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs= (ResultSet) cstmt.getObject(2);if (rs != null) {while(rs.next()) {
System.out.println(rs.getString(1));
}
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{if (rs != null) {
rs.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (cstmt != null) {
cstmt.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (conn != null) {
conn.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
三、 其他需求
1. Java调用有返回值的Oracle存储过程(返回一个简单类型的值)
(1)定义存储过程:
CREATE OR REPLACE PROCEDURE proc_A(param1 IN VARCHAR2, param2 OUT VARCHAR2)AS
BEGIN
SELECT name INTO param2 FROM T_A WHERE id =param1;END;
(2)编写Java代码:
packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;
/*** 存储过程测试
*
*@authoryacon*/
public classProcedureTest {public static void main(String[] args) throwsException {
String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String driverName= "oracle.jdbc.driver.OracleDriver";
String username= "scott";
String password= "tiger";
Connection conn= null;
CallableStatement cstmt= null;
ResultSet rs= null;try{
Class.forName(driverName);
conn=DriverManager.getConnection(url, username, password);
String callSql= "{call proc_A(?, ?) }";
cstmt=conn.prepareCall(callSql);
cstmt.setString(1, "1001");
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
cstmt.execute();
System.out.println("Output is:" + cstmt.getString(2));}catch(Exception e) {
e.printStackTrace();
}finally{try{if (rs != null) {
rs.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (cstmt != null) {
cstmt.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (conn != null) {
conn.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
2. Java调用无返回值的Oracle存储过程(无返回值)
(1)定义存储过程:
CREATE OR REPLACE PROCEDURE proc_B(param1 IN VARCHAR2, param2 IN VARCHAR2)AS
BEGIN
INSERT INTO T_B VALUES(param1, param2);END;
(2)编写Java代码:
packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;
/*** 存储过程测试
*
*@authoryacon*/
public classProcedureTest {public static void main(String[] args) throwsException {
String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String driverName= "oracle.jdbc.driver.OracleDriver";
String username= "scott";
String password= "tiger";
Connection conn= null;
CallableStatement cstmt= null;
ResultSet rs= null;try{
Class.forName(driverName);
conn=DriverManager.getConnection(url, username, password);
String callSql= "{call proc_B(?, ?) }";
cstmt=conn.prepareCall(callSql);
cstmt.setString(1, "1001");
cstmt.setString(2, "TEST");
cstmt.execute();
}catch(Exception e) {
e.printStackTrace();
}finally{try{if (rs != null) {
rs.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (cstmt != null) {
cstmt.close();
}
}catch(Exception e) {
e.printStackTrace();
}try{if (conn != null) {
conn.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
四、相关知识
1. 在plsql developer中测试存储过程时可以在存储过程名上右击选择 “测试” ,如果需要提供参数可以在下方填入参数,如果没有参数则点击执行按钮即可。
java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程相关推荐
- 课程设计代写java,JAVA课程设计作业代做、代写JAVA编程设计作业、代写data留学生作业...
JAVA课程设计作业代做.代写JAVA编程设计作业.代写data留学生作业 日期:2020-06-13 11:30 JAVA Coursework (30 marks) Suppose you nee ...
- java一天一次_做JAVA两年,月薪18k,这些自学心得你绝对值得借鉴
我是一个做了两年java的小程序员,目前在杭州工作,月薪是18K,经历过两次跳槽,第一次跳槽拿到了12K的offer,第二次跳槽拿到现在18K的offer.我上的大专,在学校是学机电一体化的,接触过工 ...
- javaweb做什么能赚钱_做一个完整的Java Web项目需要掌握的技能
原文链接:http://blog.csdn.net/JasonLiuLJX/article/details/51494048 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小 ...
- 文件上传java前端怎么写_做一个文件上传,前端是ajax提交数据后台是java,这个错误怎么办...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/ ...
- java 判断是否夏令时_确定指定日期的Java夏令时(DST)是否处于活动状态
我有一个Java类,它占用一个位置的纬度/经度,并在夏时制开启和关闭时返回GMT偏移量.我正在寻找一个简单的方法来确定Java如果当前日期是在夏令时间,所以我可以应用正确的偏移量.目前,我只对美国时区 ...
- java 模仿支付成功_我的大学到研究生自学 Java 之路,过程艰辛,不放弃,保持热情,最终发现我是这样拿到大厂 offer 的!...
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:本人真实经历:面试了20家大厂之后,发现这样介绍项目经验,显得项目很牛逼! 这一部分,其实,以前在自己的公众号写 ...
- java护照号码校验_学无止境之小白学java……第001天
学习主题:预科阶段 对应视频: http://www.itbaizhan.cn/course/id/18.html 对应作业: 1. 为什么需要学编程,什么样的人可以做程序员? 编程是现实逻辑的表达, ...
- 与Java的初吻_ The First Kiss On Java
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 初探对话 The First Exploration Foreword 前语 一.请你喝一杯Java咖啡 二.与JAVA的初次遇见 1 ...
- java面试题成都_成都汇智动力-java面试——多线程面试题
原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...
最新文章
- nanodet训练voc数据集
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
- Windows7 网上邻居设置
- 学习笔记Spark(一)—— Spark入门
- 凭证 90000000 保存(帐户确定出错)
- 职场求生:老板说,解决不了用户流失,就要解决我,咋办?
- 两间计算机房的女老师,我的女老师作文.doc
- 开始→运行→命令 总结大全
- 关于如何使用的MSCS(微软群集服务器)中的iSCSI Guest Initiators (客户机启动器)...
- 前端学习(2259)查看历史
- nat - 虚拟服务器设置,nat 虚拟服务器设置
- 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
- virtual 修饰符与继承对析构函数的影响(C++)
- css3技巧——产品列表之鼠标滑过效果(一)
- 中国知名的12个股份制商业银行,你知道几个?
- 常见单位换算[时间,距离,热量...]
- 以时间作为文件名的后缀
- 端午百望山爬山活动-金山词霸运营团队活动
- Python Prep随想练习-Day3
- VMware下ubuntu与windows主机共享文件夹
热门文章
- 你的项目是否真的需要 DevOps?
- 圣诞抽奖 | 2018年的开发者,经历了裁员、加班种种不堪,2019年的你如何获得升职加薪的机会?...
- 如何成为云计算专家?这些必须知道
- 混合云异军突起 英特尔的全“芯”体验为企业保驾护航
- harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...
- python 闭包_Python中的闭包
- CentOS 7 上安装vim 解決 centos -bash: vim: command not found
- Vue - 去除控制台“你正在开发模式下运行Vue”的警告
- 大事件后台管理系统开发实战(下)
- mysql 主从备份 主服务器配置_同一服务器配置Mysql主从备份