Java 调用存储过程、函数
一、Java调用存储Oracle存储过程
测试用表:
--创建用户表
create table USERINFO
(
username VARCHAR2(50) not null,
password VARCHAR2(50) not null,
email VARCHAR2(50) not null
)
1、调用输入参数的存储过程,无返回值
--添加用户记录
create or replace procedure pro_userinfo_insert(username VARCHAR2,password VARCHAR2,email VARCHAR2) is
begin
INSERT INTO userinfo VALUES(username,password,email);
COMMIT;
end pro_userinfo_insert;
调用
//省略jdbc其他代码 //调用存储过程
CallableStatement call = con.prepareCall("{call pro_userinfo_insert(?,?,?)}");
//传递参数
call.setString(1, "wangwu");
call.setString(2, "123123");
call.setString(3, "wangwu@163.com");
//执行方法,调用存储过程
int result = call.executeUpdate();
//返回受影响的行数
System.err.println(result);
2、调用带输出参数的存储过程,返回单个值
--获取用户的记录总数
create or replace procedure pro_userinfo_SelectCount(
v_count OUT INT
)is
begin
SELECT COUNT(*) INTO v_count FROM Userinfo;
end pro_userinfo_SelectCount;
调用代码
//调用存储过程
CallableStatement call = con.prepareCall("{call pro_userinfo_selectcount(?)}");
//传递参数
call.registerOutParameter(1, Types.INTEGER);
call.execute();
System.out.println(call.getInt(1));
注意,这里的proc.getInt(1)中的数值1并非任意的,而是和存储过程中的out列对应的,如果out是在第二个位置,那就是proc.getInt(2),如果是第三个位置,就是proc.getInt(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
3、返回列表的存储过程
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分。
创建游标类型:
--声明一个包,在包中声明公共的游标类型
create or replace package shop_package IS
--声明一个游标类型
TYPE ref_cursor IS REF CURSOR;
end shop_package;
创建带游标的存储过程:
--带输出游标的存储过程,参数类型为刚才创建的包中的游标类型
create or replace procedure pro_userinfo_select(cur OUT shop_package.ref_cursor) is
begin
--游标进行绑定查询的sql语句
OPEN cur FOR SELECT * FROM userinfo;
end pro_userinfo_select;
Java调用代码
//调用存储过程
CallableStatement call = con.prepareCall("{call pro_userinfo_select(?)}");
//设置输出参数类型为游标类型
call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
call.execute();
//将游标类型转换为数据集,然后遍历数据集即可
ResultSet rs = (ResultSet) call.getObject(1);
System.out.println("姓名\t\t邮箱");
while(rs.next()){
System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));
}
二、Java调用函数
1、调用函数,返回单个值
--根据用户名称获取Email函数,返回字符串格式
create or replace function fun_userinfo_selectEmail(v_username varchar2)
return varchar2
is
v_email VARCHAR2(50);
begin
SELECT email INTO v_email FROM Userinfo WHERE username=v_username;
return(v_email);
end fun_userinfo_selectEmail;
Java调用
//调用函数
CallableStatement call = con.prepareCall("{?=call fun_userinfo_selectemail(?)}"); //这里必须使用{},否则会报错!
//设置参数,1为函数返回值,2为传递到函数中的参数
call.registerOutParameter(1, Types.VARCHAR);
call.setString(2, "zhangsan");
call.execute();
System.out.println(call.getString(1));
2、调用返回游标的函数
--返回游标类型的函数,游标为前面在包中定义的游标类型
create or replace function fun_userinfo_select return shop_package.ref_cursor is
ref_cur shop_package.ref_cursor;
begin
OPEN ref_cur FOR SELECT * FROM userinfo;
return(ref_cur);
end fun_userinfo_select;
Java调用
//调用函数
CallableStatement call = con.prepareCall("{?=call fun_userinfo_select()}");
//设置返回值类型为游标
call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
call.execute(); ResultSet rs = (ResultSet) call.getObject(1);
System.out.println("姓名\t\t邮箱");
while(rs.next()){
System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));
}
Java 调用存储过程、函数的更多相关文章
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
- clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
- Oracle数据库基本操作 (五) —— 使用java调用存储过程
一.环境准备 登录Oracle数据库scott账号,利用emp进行操作. 1.创建 proc_getyearsal 存储过程 -- 获取指定员工年薪 create or replace procedu ...
- OTL调用存储过程/函数及注意事项
OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个 C++ 编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库. OTL ...
- java调用存储过程(stored procedures)的HelloWorld例子
1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道.存储过程(stored procedures)和java没什么关系.它是一段纯粹的 ...
- java调用存储过程和函数
以对表test进行增,删,改,查进行说明:1.新建表test create table TEST ( TID NUMBER not null, TNAME VARCHAR2(32), TCODE VA ...
- 【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- java调用存储过程、存储函数
需要用到的接口 接口 CallableStatement JDK文档对改接口的说明: public interface CallableStatement extends PreparedStatem ...
- java调用存储过程
在做java调用sqlserver存储过程时遇到了各种各样的问题,不过在不懈的努力之下这些问题还是得以解决了.今天总结一下遇到的问题以及解决的方法. 首先调用存储过程的方法大家都很清楚: String ...
随机推荐
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- VLC-开源播放器编译
http://blog.sina.com.cn/s/blog_7b9d64af0101jpvy.html 需要VLC 在iOS开发中,如果你的程序中播放视频,并且多媒体播放功能是你iOS程序的核心功能 ...
- Linux的系统级性能剖析工具-perf
一直在找个靠谱且易用的性能分析工具,perf 貌似是很符合要求的,先给出阿里整理的几篇文档: Linux的系统级性能剖析工具-perf-1.pdf Linux的系统级性能剖析工具-perf-2.pdf ...
- 不错的usb分析工具!!!---用bus hound分析usb的枚举过程【转】
转自:http://blog.chinaunix.net/uid-25909619-id-3335199.html 说明:由于分析时是在记事本上分析的,贴到这里出现了格式有点乱,看时请复制到记事本中, ...
- 学习SPRING BOOT, SPRING CLOUD之Eureka和security
有意思,明天去杨浦报名了一个SPRING CLOUD沙龙, 今天再抓紧看看哈哈哈. Eureka服务端: EurekaApplication.java package com.packtpub.Eur ...
- Spring:基于配置文件的创建对象的各种方式
在Spring3.0之前,Spring主要创建对象的方法是基于配置文件的,即在配置文件中为对象进行注册,并且可以在配置文件当中为对象的字段或者称之为属性值进行赋值,接下来首先介绍基于配置文件的创建对象 ...
- HDU 1024 Max Sum Plus Plus(基础dp)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- docker环境准备及理论
1.预热 内核运行在内核空间,进程运行在用户空间,linux进程特性:父进程负责子进程的创建和回收,白发人送黑发人.容器就是为了保护它里面的内容物,不受其他容器干扰,也不去干扰其他容器.容器让进程认为 ...
- OpenJ_Bailian - 1037 A decorative fence
Discription Richard just finished building his new house. Now the only thing the house misses is a c ...
- Python学习笔记——条件控制
Python中的条件控制方式基本和C语言类似,主要有如下几种语法: If条件判断 Python的条件语句的语法是if…elseif…else,如下的一个简单的猜数字的示例演示了这一过程: number ...