Java调用Oracle、mysql带out参数的存储过程
2012-06-27 11:07
741 查看
create or replace package pkg_sxxtj as
type sxxtj_out_values is ref cursor;
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values);
end pkg_sxxtj;
****************************************************************************
create or replace package body pkg_sxxtj as
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values)
is
sqlStr varchar2(900);
begin
if startDate is null and endDate is null then
open out_list for
select * from (select t.node_id as node_id, count(t.node_id) as total_count,
sum(case when t.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when t.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when t.over_time > t.operate_date then 1 else 0 end) as js_count,
sum(case when t.over_time < t.operate_date then 1 else 0 end) as cs_count
from card_business_node t where t.node_id not in (0007, 0011) group by t.node_id
union
select s.sh_node_id as node_id, count(s.sh_node_id) as total_count,
sum(case when s.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when s.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when s.over_time > s.operate_date then 1 else 0 end) as js_count,
sum(case when s.over_time < s.operate_date then 1 else 0 end) as cs_count from card_business_sh_node s group by s.sh_node_id) res;
end if;
end auditing_result;
end pkg_sxxtj;
*************************************************************************
// 下面是java 源码,从oracle存储过程读取记录集
// 注意一定要用oracle的jdbc API ( 可以从oracle网站下载 )
public void test(){
//Session session=getSession();
Connection con=null;
OracleCallableStatement cs=null;
OracleResultSet rs=null;
SimpleDateFormat sdf=new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
sdf.applyPattern("yyyy年MM月dd日 HH时mm分ss秒");
java.sql.Date sd=null;
con=getSession().connection();
try {
cs=(OracleCallableStatement) con.prepareCall("{call pkg_sxxtj.auditing_result(?,?,?)}");
cs.setDate(1, sd);
cs.setDate(2, sd);
cs.registerOutParameter(3,OracleTypes.CURSOR);
//cs.registerOutParameter(3,java.sql.Types.OTHER);
cs.execute();
rs=(OracleResultSet) cs.getCursor(3);
while(rs.next()){
log.info("===================环节号:"+String.valueOf(rs.getString(1)));
log.info("||统计数:"+String.valueOf(rs.getInt(2)));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(cs!=null){
cs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
二、mysql的调用
java调用mysql存储过程:
String procedure = "{call nextid (?)}"; // 不能写为{?= call nextid (?)}
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setString(1, "cprounit");
cstmt.execute();
ResultSet rs = cstmt.getResultSet();
if (rs.next()) {
result = rs.getInt(1);
}
java调用myql函数的方法有两种:
1. String procedure = "{?=call test.get_next_value (?)}";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setString(2, "user_id");
cstmt.execute();
result = cstmt.getInt(1);
2. String procedure = "select test.get_next_value (?)";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setString(1, "user_id");
cstmt.execute();
ResultSet rs = cstmt.getResultSet();
if (rs.next()) {
result = rs.getInt(1);
}
type sxxtj_out_values is ref cursor;
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values);
end pkg_sxxtj;
****************************************************************************
create or replace package body pkg_sxxtj as
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values)
is
sqlStr varchar2(900);
begin
if startDate is null and endDate is null then
open out_list for
select * from (select t.node_id as node_id, count(t.node_id) as total_count,
sum(case when t.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when t.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when t.over_time > t.operate_date then 1 else 0 end) as js_count,
sum(case when t.over_time < t.operate_date then 1 else 0 end) as cs_count
from card_business_node t where t.node_id not in (0007, 0011) group by t.node_id
union
select s.sh_node_id as node_id, count(s.sh_node_id) as total_count,
sum(case when s.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when s.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when s.over_time > s.operate_date then 1 else 0 end) as js_count,
sum(case when s.over_time < s.operate_date then 1 else 0 end) as cs_count from card_business_sh_node s group by s.sh_node_id) res;
end if;
end auditing_result;
end pkg_sxxtj;
*************************************************************************
// 下面是java 源码,从oracle存储过程读取记录集
// 注意一定要用oracle的jdbc API ( 可以从oracle网站下载 )
public void test(){
//Session session=getSession();
Connection con=null;
OracleCallableStatement cs=null;
OracleResultSet rs=null;
SimpleDateFormat sdf=new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
sdf.applyPattern("yyyy年MM月dd日 HH时mm分ss秒");
java.sql.Date sd=null;
con=getSession().connection();
try {
cs=(OracleCallableStatement) con.prepareCall("{call pkg_sxxtj.auditing_result(?,?,?)}");
cs.setDate(1, sd);
cs.setDate(2, sd);
cs.registerOutParameter(3,OracleTypes.CURSOR);
//cs.registerOutParameter(3,java.sql.Types.OTHER);
cs.execute();
rs=(OracleResultSet) cs.getCursor(3);
while(rs.next()){
log.info("===================环节号:"+String.valueOf(rs.getString(1)));
log.info("||统计数:"+String.valueOf(rs.getInt(2)));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(cs!=null){
cs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
二、mysql的调用
java调用mysql存储过程:
String procedure = "{call nextid (?)}"; // 不能写为{?= call nextid (?)}
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setString(1, "cprounit");
cstmt.execute();
ResultSet rs = cstmt.getResultSet();
if (rs.next()) {
result = rs.getInt(1);
}
java调用myql函数的方法有两种:
1. String procedure = "{?=call test.get_next_value (?)}";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setString(2, "user_id");
cstmt.execute();
result = cstmt.getInt(1);
2. String procedure = "select test.get_next_value (?)";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setString(1, "user_id");
cstmt.execute();
ResultSet rs = cstmt.getResultSet();
if (rs.next()) {
result = rs.getInt(1);
}
相关文章推荐
- JAVA调用Oracle存储过程传入结构化参数
- hibernate4连接Oracle带out参数的存储过程调用
- oracle :带有out参数的存储过程的调用方法
- java 调用oracle存储过程传入 数组参数 不用纯jdbc连接
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- java调用oracle存储过程传入参数为数组的处理
- oracle调用带in out参数的存储过程
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- oracle调用带in out参数的存储过程
- Java调用Oracle集合类型输出参数的存储过程
- Java调用Oracle集合类型输出参数的存储过程
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- C#调用Oracle带有out游标参数存储过程的问题
- Java调用Oracle集合类型输出参数的存储过程
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- java 调用oracle的存储过程返回记录集
- 如何通过java程序调用oracle中的存储过程
- mysql存储过程及java调用存储过程
- Oracle存储过程及其java程序调用
- java下实现调用oracle的存储过程和函数