关闭

在java语言中调用存储过程

868人阅读 评论(0) 收藏 举报
首先一定要连接数据库啊
private static Connection conn;
	static{
		//第一步:加载驱动
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				//得到连接对象		conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","scott");
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
实例一:
【
create or replace procedure selectEmp(emp_no in number,ename out varchar2,job out varchar2,sal out number,deptno out number) is
begin
select ename,job,sal,deptno into ename,job,sal,deptno from emp where empno=emp_no;
end selectEmp;
】
//调用存储过程
	public static void procedure() throws SQLException{
		//创建CallableStatement  参数in  out  通过占位符传值
		CallableStatement cas=conn.prepareCall("{call  selectEmp(?,?,?,?,?)}");
		//从1开始
		int index = 1;
		//为占位符赋值
		cas.setInt(index++, 7369);//赋值的是输入参数
		//输出参数
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
		//根据传递的参数值执行操作       如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false
		boolean flag=cas.execute();
		System.out.println(flag);
		if(!flag){//执行成功了
			String ename=cas.getString(2);
			String job=cas.getString(3);
			int sal=cas.getInt(4);
			int deptno=cas.getInt(5);
			System.out.println(ename);
			System.out.println(job);
			System.out.println(sal);
			System.out.println(deptno);
		}
	}
实例二:
【
通过包声明一个存储过程
create or replace package emppackage is
type empcursor is ref cursor;
procedure selectEmps(emplist out empcursor);
end emppackage;
包体:
create or replace package body emppackage is
procedure selectEmps(emplist out empcursor) is
begin
open emplist for select * from emp;
end;
end emppackage;
】
	public static void testProcedure() throws SQLException{
		//创建CallableStatement  参数in  out  通过占位符传值
		CallableStatement cas=conn.prepareCall("{call  emppackage.selectEmps(?)}");
		//从1开始
		int index = 1;
		//为占位符赋值
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);
		//根据传递的参数值执行操作     返回false代表里面什么也没有,返回true代表返回的是ResultSet结果集
		boolean flag=cas.execute();
		System.out.println(flag);
		//OracleCallableStatement强制造型为oracle中的存储过程的对象
		//调用里边的getCursor方法 返回的是ResultSet结果集
		ResultSet rs = ((OracleCallableStatement)cas).getCursor(1);
		while(rs.next()){
			System.out.println(rs.getInt(1));
		}
	}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:403519次
    • 积分:5938
    • 等级:
    • 排名:第4428名
    • 原创:210篇
    • 转载:15篇
    • 译文:0篇
    • 评论:38条
    文章分类
    最新评论