在Java语言中调用存储过程
在Java语言中调用存储过程
首先一定要连接数据库啊
- 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);
- }
- }
|
评论暂时关闭