자바 언어 에서 저장 프로 세 스 와 저장 함수 에 접근

 java              
      :
                      ,        java      oracle           。
          oracle   ,         oracle         :oracle\product\10.2.0\db_1\jdbc\lib\ojbc14.jar, ,  ,     oracle  ,    java     !
        --        !
1.	          oracle     :
private static Connection conn;
static {
		try {
			//    :    
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//         test1      
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:orcl", "test1", "test1");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
2.            ,        :
 create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) is
begin
  select ename,job,sal into ename,job,sal from emp where empno=emp_no;
end selectEmp;

 java          ,   :
public static void testprocedure() {
		try {
			//   callabStatement                   int 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);

			//           ResultSet       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);
				System.out.println(ename);
				System.out.println(job);
				System.out.println(sal);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

3.      ,        
	create or replace procedure selectemp1(emp_no in number, emp_row out emp%rowtype) is
begin
  select *  into emp_row from emp where empno=emp_no;
end selectemp1;
 java    
public static void testprocedureRow() {
		try {
			// rowtype   
			CallableStatement cas = conn.prepareCall("{call selectemp1(?,?)}");
			int index = 1;
			//              
			cas.setInt(index++, 7369);
			cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.ARRAY);
			boolean flag = cas.execute();
			System.out.println(flag);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
4.         emp       
	        ,        :
	     :
	create or replace package empPackage is
 	 --        
  	type empcursor is ref cursor;
  		--               type       
 		 procedure selectEmps(emplist out empcursor);
end empPackage;
   :
create or replace package body empPackage is
--                       
 		 procedure selectEmps(emplist out empcursor)  is
  		--s       
  		begin
    		--      
   			open emplist for select * from emp;
  	end;
  		--    
end empPackage;

 java        :
public static void getprocedurePackage() {
		try {
			CallableStatement cas = conn
					.prepareCall("{call empPackage.selectEmps(?)}");
			int index = 1;
			//              
			cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);
			boolean flag = cas.execute();
			System.out.println(flag);
			//      getCursor       ResultSet   
			ResultSet rs = ((OracleCallableStatement) cas).getCursor(1);
			while (rs.next()) {
				System.out.println(rs.getInt(1));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

           
1.	    ,          
create or replace function sumSal(emp_no number)--function  (        )
return number --      
as
--    
emp_sal emp.sal%type;
emp_comm emp.comm%type;
total emp.sal%type;
begin
  select sal,comm into emp_sal,emp_comm from emp where empno=emp_no;
  total := emp_sal*12+nvl(emp_comm,0);
  return total;--    ,         
end;

 java       
public static void getfunction() {
		try {
			//       
			CallableStatement cas = conn.prepareCall("{?=call sumSal(?)}");
			int index = 1;
			//      parameterIndex   OUT       JDBC    sqlType。
			//   OUT                
			cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
			//       
			cas.setInt(index++, 7369);
			
			boolean flag = cas.execute();//  
			System.out.println(flag);
			
			System.out.println(cas.getInt(1));
			/**
			 *              ,          1。 

			 *                  get      。 
			 */

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

2.	       ,     
(1)    
create or replace package functionEmps is
  --    
  		type empcl is ref cursor;
 		 function queryEmps return empcl;
end functionEmps;
(2)   
create or replace package body functionEmps is
function queryEmps return empcl is
 	 emp_cl empcl;
  	begin
    		open emp_cl for select * from emp;
   	 return emp_cl;
  	end;
end functionEmps;
 java       :
public static void testpackage(){
		try {
			CallableStatement cas = conn.prepareCall("{?=call functionEmps.queryEmps}");
			int index = 1;
			//              
			cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);
			boolean flag = cas.execute();
			System.out.println(flag);

			ResultSet rs = ((OracleCallableStatement) cas).getCursor(1);
			while (rs.next()) {
				System.out.println(rs.getInt(1));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
      ,       !            ,          !
Oracle     :Class.forName("oracle.jdbc.driver.OracleDriver");
     :jdbc:oracle:thin:@localhost:1521:orcl", "test1", "test1"
        。  
(1)	     CallableStatement  ,       !
CallableStatement   java.sql    ,     SQL        。JDBC API           SQL     ,         RDBMS             。                              。        ,         OUT    。         、         。             ,          1。
(2)registerOutParameter        
       parameterIndex   OUT       JDBC    sqlType。
(3)cas.execute();      boolean   ,   PreparedStatement       SQL   ,            SQL   。                ,execute            ,executeQuery   executeUpdate           。 
execute        boolean  ,           。     getResultSet   getUpdateCount        ,       getMoreResults           。 


좋은 웹페이지 즐겨찾기