java调用存储过程
2017-10-28 12:20
363 查看
案例一
无返回值过程
创建一个book表,可以往表中插入数据,使用java来调用这个过程。
1.创建一个表book
create table book (bookid number(20),bookname varchar2(40),cbs varchar2(40));
2.编写过程
--in 表示这是一个输入的参数,默认是in
-- out 表示一个输出参数
create or replace procedure hfc_hfc(bookid in number,
bookname in varchar2,cbs in varchar2)is
begin
insert into book values (bookid,bookname,cbs);
end;
--这里调用时要在java里调用
有返回值的存储过程:(非列表)
再看如何处理返回值的存储过程:
案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。
案例2
--有输入和输出的存储过程,有返回值。
--输入员工的编号,返回员工的姓名
create or replace procedure hfc_a (srno in number,scname out varchar2)is
begin
select ename into scname from emp where empno=srno;
end;
--输出操作在java程序中进行取出。
案例扩展:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资、和岗位。
案例3
--有输入和输出的存储过程,有返回值。
--输入员工的编号,返回员工的姓名,工资,职位。
--输入员工的编号,返回员工的姓名,工资,岗位
create or replace procedure hfc_a (srno in number,
scname out varchar2,scsal out number,scjob out varchar2)is
begin
select ename,sal,job into scname,scsal,scjob from emp where empno=srno;
end;
--输出操作在java程序中进行取出。
使用java来调用过程操作。
package com;
import java.rmi.activation.ActivationGroupDesc.CommandEnvironment;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class test1 {
//调用存储过程
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott",
"tiger");
// 案例1
//调用存储过程CallableStatement
//CallableStatement cst=ct.prepareCall("{call hfc_hfc(?,?,?)}");
//赋值
//cst.setInt(1, 10);
//cst.setString(2, "天下无敌");
//cst.setString(3, "北京人民出版社");
//案例2
//调用存储过程CallableStatement
CallableStatement cs=ct.prepareCall("{call hfc_a(?,?)}");
//扩展
CallableStatement cst=ct.prepareCall("{call hfc_a(?,?,?,?)}");
//输入值
cs.setInt(1, 7788);
//输出值
cs.registerOutParameter(2, oracle.jdbc.oracleTypes.varchar);
//扩展
cs.registerOutParameter(3, oracle.jdbc.oracleTypes.double);
cs.registerOutParameter(4, oracle.jdbc.oracleTypes.varchar);
//执行
//cst.execute();
cs.close();
//取出返回值,注意?的顺序
String name=cs.getString(2);
//扩展
String sal=cs.getString(3);
String job=cs.getString(4);
//接收输出的值
System.out.print("7788的名字是"+name+job+sal);
//关闭资源
//cst.close();
cs.close();
ct.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
有返回值的存储过程(列表[结果集])。返回结果集
案例4:编写一个过程,输入部门号,返回该部门所有雇员的信息。
对该题进行分析:
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来代替代,列表同样也不例外,但是由于是集合,所有不能用一般参数,必须使用package
所有要分两部分。
1. 建立一个包:(定义一个游标类型的游标)
Create or replace package test_package as type test_cursor is
ref cursor;//游标
End test_package;
2. java调用过程
package com;
import java.security.interfaces.RSAKey;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.naming.spi.DirStateFactory.Result;
public class test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott",
"tiger");
//创建CallableStatement
CallableStatement cs=ct.prepareCall("{call hfc_a(?,?)}");
//给?赋值
cs.setInt(1, 20);
//注册一个?
cs.registerOutParameter(2, oracle.jdbc.oracleType.cursor);
cs.execute();
//得到结果集
ResultSet rs=(ResultSet)cs.getObject(2);
//循环输出
while(rs.next()){
System.out.print(rs.getInt(1)+" "+rs.getInt(2)+" "+rs.getInt(3));
}
//关闭资源
rs.close();
cs.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
无返回值过程
创建一个book表,可以往表中插入数据,使用java来调用这个过程。
1.创建一个表book
create table book (bookid number(20),bookname varchar2(40),cbs varchar2(40));
2.编写过程
--in 表示这是一个输入的参数,默认是in
-- out 表示一个输出参数
create or replace procedure hfc_hfc(bookid in number,
bookname in varchar2,cbs in varchar2)is
begin
insert into book values (bookid,bookname,cbs);
end;
--这里调用时要在java里调用
有返回值的存储过程:(非列表)
再看如何处理返回值的存储过程:
案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。
案例2
--有输入和输出的存储过程,有返回值。
--输入员工的编号,返回员工的姓名
create or replace procedure hfc_a (srno in number,scname out varchar2)is
begin
select ename into scname from emp where empno=srno;
end;
--输出操作在java程序中进行取出。
案例扩展:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资、和岗位。
案例3
--有输入和输出的存储过程,有返回值。
--输入员工的编号,返回员工的姓名,工资,职位。
--输入员工的编号,返回员工的姓名,工资,岗位
create or replace procedure hfc_a (srno in number,
scname out varchar2,scsal out number,scjob out varchar2)is
begin
select ename,sal,job into scname,scsal,scjob from emp where empno=srno;
end;
--输出操作在java程序中进行取出。
使用java来调用过程操作。
package com;
import java.rmi.activation.ActivationGroupDesc.CommandEnvironment;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class test1 {
//调用存储过程
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott",
"tiger");
// 案例1
//调用存储过程CallableStatement
//CallableStatement cst=ct.prepareCall("{call hfc_hfc(?,?,?)}");
//赋值
//cst.setInt(1, 10);
//cst.setString(2, "天下无敌");
//cst.setString(3, "北京人民出版社");
//案例2
//调用存储过程CallableStatement
CallableStatement cs=ct.prepareCall("{call hfc_a(?,?)}");
//扩展
CallableStatement cst=ct.prepareCall("{call hfc_a(?,?,?,?)}");
//输入值
cs.setInt(1, 7788);
//输出值
cs.registerOutParameter(2, oracle.jdbc.oracleTypes.varchar);
//扩展
cs.registerOutParameter(3, oracle.jdbc.oracleTypes.double);
cs.registerOutParameter(4, oracle.jdbc.oracleTypes.varchar);
//执行
//cst.execute();
cs.close();
//取出返回值,注意?的顺序
String name=cs.getString(2);
//扩展
String sal=cs.getString(3);
String job=cs.getString(4);
//接收输出的值
System.out.print("7788的名字是"+name+job+sal);
//关闭资源
//cst.close();
cs.close();
ct.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
有返回值的存储过程(列表[结果集])。返回结果集
案例4:编写一个过程,输入部门号,返回该部门所有雇员的信息。
对该题进行分析:
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来代替代,列表同样也不例外,但是由于是集合,所有不能用一般参数,必须使用package
所有要分两部分。
1. 建立一个包:(定义一个游标类型的游标)
Create or replace package test_package as type test_cursor is
ref cursor;//游标
End test_package;
2. java调用过程
package com;
import java.security.interfaces.RSAKey;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.naming.spi.DirStateFactory.Result;
public class test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott",
"tiger");
//创建CallableStatement
CallableStatement cs=ct.prepareCall("{call hfc_a(?,?)}");
//给?赋值
cs.setInt(1, 20);
//注册一个?
cs.registerOutParameter(2, oracle.jdbc.oracleType.cursor);
cs.execute();
//得到结果集
ResultSet rs=(ResultSet)cs.getObject(2);
//循环输出
while(rs.next()){
System.out.print(rs.getInt(1)+" "+rs.getInt(2)+" "+rs.getInt(3));
}
//关闭资源
rs.close();
cs.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
相关文章推荐
- java调用存储过程
- mysql存储过程学习及java调用存储过程
- java调用存储过程
- java 连接SQL2008(查询、插入、调用存储过程)
- JAVA中对存储过程的调用方法
- JAVA中对存储过程的调用方法(引)
- 【Java 调用Oracle 存储过程】
- java调用oracle 存储过程 以及游标使用
- JAVA中对存储过程的调用方法
- java通过prepareCall调用oracle返回游标的存储过程
- Java 调用存储过程、函数
- oracle实现存储过程的分页并用java代码调用存储过程
- 在 java web 中调用存储过程
- sql(join中on与where区别) / NVL函数 / oracle存储过程中is和as区别 / JAVA调用数据库存储过程
- CallableStatement java中调用存储过程
- Navicat创建存储过程和触发器,Java调用
- Java中调用参数是数组的存储过程
- java 调用mysql存储过程
- mysql存储过程学习及java调用存储过程
- java调用存储过程