Java代碼調用存儲過程和存儲方法


准備一個oracle 的JDBC jar 包:ojdbc14_11g.jar

首先找到你的 oracle 安裝位置,例如:

 

1.創建一個JDBC數據庫連接工具類:

 

  1. package com.test.db;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.   
  9. public class JDBCUtils {  
  10.   
  11.     private static String driver = "oracle.jdbc.OracleDriver";  
  12.     private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";  
  13.     private static String user = "數據庫連接名";  
  14.     private static String password = "數據庫連接密碼";  
  15.       
  16.     //注冊數據庫驅動  
  17.     static{  
  18.         try {  
  19.             Class.forName(driver);  
  20.         } catch (Exception e) {  
  21.             throw new ExceptionInInitializerError(e);  
  22.         }  
  23.     }  
  24.       
  25.     /** 
  26.      * 獲取數據庫連接 
  27.      * @return 
  28.      */  
  29.     public static Connection getConnection(){  
  30.         try {  
  31.             return DriverManager.getConnection(url,user,password);  
  32.         } catch (SQLException e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.         return null;  
  36.     }  
  37.       
  38.     /** 
  39.      * 釋放數據庫連接資源 
  40.      * @param conn 
  41.      * @param st 
  42.      * @param rs 
  43.      */  
  44.     public static void release(Connection conn,Statement st,ResultSet rs){  
  45.         if (rs!=null) {  
  46.             try {  
  47.                 rs.close();  
  48.             } catch (SQLException e) {  
  49.                 e.printStackTrace();  
  50.             }finally{  
  51.                 rs = null;  
  52.             }  
  53.         }  
  54.           
  55.         if (st!=null) {  
  56.             try {  
  57.                 st.close();  
  58.             } catch (SQLException e) {  
  59.                 e.printStackTrace();  
  60.             }finally{  
  61.                 st = null;  
  62.             }  
  63.         }  
  64.           
  65.         if (conn!=null) {  
  66.             try {  
  67.                 conn.close();  
  68.             } catch (SQLException e) {  
  69.                 e.printStackTrace();  
  70.             }finally{  
  71.                 conn = null;  
  72.             }  
  73.         }  
  74.     }  
  75. }  
package com.test.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

	private static String driver = "oracle.jdbc.OracleDriver";
	private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
	private static String user = "數據庫連接名";
	private static String password = "數據庫連接密碼";
	
	//注冊數據庫驅動
	static{
		try {
			Class.forName(driver);
		} catch (Exception e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	/**
	 * 獲取數據庫連接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			return DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 釋放數據庫連接資源
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void release(Connection conn,Statement st,ResultSet rs){
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				rs = null;
			}
		}
		
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				st = null;
			}
		}
		
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				conn = null;
			}
		}
	}
}

2.調用 存儲過程:

 

  1. package com.test.demo;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5.   
  6. import org.junit.Test;  
  7.   
  8. import oracle.jdbc.internal.OracleTypes;  
  9. import oracle.jdbc.oracore.OracleType;  
  10.   
  11. import com.hwb.db.JDBCUtils;  
  12.   
  13. /** 
  14.  * 調用存儲過程  一個輸入參數,多個 輸出參數 
  15.  * @author Administrator 
  16.  * 
  17.  */  
  18. public class ProcedureTest {  
  19.   
  20.     /** 
  21.      * create or replace procedure selectUserById(uid in number, 
  22.                                            uName out VARCHAR2, 
  23.                                            uAge out number, 
  24.                                            uSex out char) 
  25.      */  
  26.       
  27.     @Test  
  28.     public void testProcedure(){  
  29.           
  30.         String sql = "{call selectUserById(?,?,?,?)}";  
  31.           
  32.         Connection conn = null;  
  33.         CallableStatement call = null;  
  34.         try {  
  35.             //得到一個數據庫連接  
  36.             conn = JDBCUtils.getConnection();  
  37.             //通過連接創建出statement  
  38.             call = conn.prepareCall(sql);  
  39.             //對於in參數,賦值  
  40.             call.setInt(1, 2);  // (第幾個問號,要賦的值)  
  41.             //對out參數,聲明  
  42.             call.registerOutParameter(2, OracleTypes.VARCHAR);  //(第幾個問號,聲明的類型)  
  43.             call.registerOutParameter(3, OracleTypes.NUMBER);  
  44.             call.registerOutParameter(4, OracleTypes.CHAR);  
  45.               
  46.             //執行調用  
  47.             call.execute();  
  48.               
  49.             //取出結果  
  50.             String userName = call.getString(2);  
  51.             int userAge = call.getInt(3);  
  52.             String userSex = call.getString(4);  
  53.               
  54.             System.out.println("用戶姓名:"+userName+"\n\t年齡:"+userAge+"\n\t性別:"+userSex);  
  55.               
  56.         } catch (Exception e) {  
  57.             e.printStackTrace();  
  58.         }finally{  
  59.                     //關閉連接,釋放資源  
  60.                    JDBCUtils.release(conn, call, null);  
  61.         }  
  62.           
  63.     }  
  64. }  
package com.test.demo;

import java.sql.CallableStatement;
import java.sql.Connection;

import org.junit.Test;

import oracle.jdbc.internal.OracleTypes;
import oracle.jdbc.oracore.OracleType;

import com.hwb.db.JDBCUtils;

/**
 * 調用存儲過程  一個輸入參數,多個 輸出參數
 * @author Administrator
 *
 */
public class ProcedureTest {

	/**
	 * create or replace procedure selectUserById(uid in number,
                                           uName out VARCHAR2,
                                           uAge out number,
                                           uSex out char)
	 */
	
	@Test
	public void testProcedure(){
		
		String sql = "{call selectUserById(?,?,?,?)}";
		
		Connection conn = null;
		CallableStatement call = null;
		try {
			//得到一個數據庫連接
			conn = JDBCUtils.getConnection();
			//通過連接創建出statement
			call = conn.prepareCall(sql);
			//對於in參數,賦值
			call.setInt(1, 2);  // (第幾個問號,要賦的值)
			//對out參數,聲明
			call.registerOutParameter(2, OracleTypes.VARCHAR);  //(第幾個問號,聲明的類型)
			call.registerOutParameter(3, OracleTypes.NUMBER);
			call.registerOutParameter(4, OracleTypes.CHAR);
			
			//執行調用
			call.execute();
			
			//取出結果
			String userName = call.getString(2);
			int userAge = call.getInt(3);
			String userSex = call.getString(4);
			
			System.out.println("用戶姓名:"+userName+"\n\t年齡:"+userAge+"\n\t性別:"+userSex);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
                    //關閉連接,釋放資源
                   JDBCUtils.release(conn, call, null);
		}
		
	}
}

3.調用存儲方法:

 

  1. package com.test.demo;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5.   
  6. import oracle.jdbc.internal.OracleTypes;  
  7.   
  8. import org.junit.Test;  
  9.   
  10. import com.hwb.db.JDBCUtils;  
  11.   
  12. /** 
  13.  * 調用存儲函數,一個輸入參數,一個輸出參數 
  14.  * @author Administrator 
  15.  * 
  16.  */  
  17. public class FunctionTest {  
  18.   
  19.     /** 
  20.      * create or replace function selectAge(eno in number) 
  21.         return number  
  22.      */  
  23.     @Test  
  24.     public void testFunction(){  
  25.         //{?= call <procedure-name>[<arg1>,<arg2>...]}  
  26.         String sql = "{call selectAge(?)}";  
  27.         Connection conn = null;  
  28.         CallableStatement call = null;  
  29.         try {  
  30.             //得到數據庫連接  
  31.             conn = JDBCUtils.getConnection();  
  32.               
  33.             //通過數據庫連接創建statement  
  34.             call = conn.prepareCall(sql);  
  35.               
  36.             //對於輸出參數,聲明  
  37.             call.registerOutParameter(1, OracleTypes.NUMBER);  
  38.               
  39.             //對於輸入參數,賦值  
  40.             call.setInt(2, 3);  
  41.               
  42.             //執行調用  
  43.             call.execute();  
  44.               
  45.                         //獲取返回的結果  
  46.             int age = call.getInt(1);  
  47.               
  48.             System.out.println("該用戶年齡:"+age);  
  49.         } catch (Exception e) {  
  50.             e.printStackTrace();  
  51.         }finally{  
  52.             JDBCUtils.release(conn, call, null);  
  53.         }  
  54.     }  
  55. }  
package com.test.demo;

import java.sql.CallableStatement;
import java.sql.Connection;

import oracle.jdbc.internal.OracleTypes;

import org.junit.Test;

import com.hwb.db.JDBCUtils;

/**
 * 調用存儲函數,一個輸入參數,一個輸出參數
 * @author Administrator
 *
 */
public class FunctionTest {

	/**
	 * create or replace function selectAge(eno in number)
		return number 
	 */
	@Test
	public void testFunction(){
		//{?= call <procedure-name>[<arg1>,<arg2>...]}
		String sql = "{call selectAge(?)}";
		Connection conn = null;
		CallableStatement call = null;
		try {
			//得到數據庫連接
			conn = JDBCUtils.getConnection();
			
			//通過數據庫連接創建statement
			call = conn.prepareCall(sql);
			
			//對於輸出參數,聲明
			call.registerOutParameter(1, OracleTypes.NUMBER);
			
			//對於輸入參數,賦值
			call.setInt(2, 3);
			
			//執行調用
			call.execute();
			
                        //獲取返回的結果
			int age = call.getInt(1);
			
			System.out.println("該用戶年齡:"+age);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			JDBCUtils.release(conn, call, null);
		}
	}
}

4.調用存儲過程,一個輸入參數,返回一個查詢結果集合

 

  1. package com.hwb.demo;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5. import java.sql.ResultSet;  
  6.   
  7.   
  8.   
  9.   
  10. import org.junit.Test;  
  11.   
  12. import oracle.jdbc.internal.OracleCallableStatement;  
  13. import oracle.jdbc.internal.OracleTypes;  
  14.   
  15. import com.hwb.db.JDBCUtils;  
  16. /** 
  17.  * 存儲過程  一個輸入參數,返回一個查詢結果集合 
  18.  * @author Administrator 
  19.  * 
  20.  */  
  21. public class CursorTest {  
  22.   
  23.     /** 
  24.      * create or replace package Mypackage as 
  25.         procedure queryUserList(uid in number,userList out usercursor); 
  26.         end mypackage; 
  27.      */  
  28.     @Test  
  29.     public void testCursor(){  
  30.         String sql = "{call Mypackage.queryUserList(?,?) }";  
  31.           
  32.         Connection conn = null;  
  33.         CallableStatement call = null;  
  34.         ResultSet rs = null;  
  35.         try {  
  36.             //得到數據庫連接  
  37.             conn = JDBCUtils.getConnection();  
  38.             //通過數據庫連接創建statement  
  39.             call = conn.prepareCall(sql);  
  40.               
  41.             //對於輸入參數,賦值  
  42.             call.setInt(1, 1);  
  43.             //對於輸出參數,聲明  
  44.             call.registerOutParameter(2, OracleTypes.CURSOR);  
  45.             //執行調用  
  46.             call.execute();  
  47.             //將CallableStatement 強轉成  OracleCallableStatement 用來獲取光標類型Cursor,並得到結果ResultSet  
  48.             rs = ((OracleCallableStatement)call).getCursor(2);  
  49.             //遍歷 ResultSet  
  50.             while (rs.next()) {  
  51.                 //根據類型和列名取值  
  52.                 int id = rs.getInt("user_id");    //括號內為 列名  
  53.                 String user_name = rs.getString("user_name");  
  54.                 int age = rs.getInt("user_age");  
  55.                 String sex = rs.getString("user_sex");  
  56.                 System.out.println("查詢到的用戶信息:\n\tid:"+id+"\n\t姓名:"+user_name  
  57.                         +"\n\t年齡:"+age+"\n\t性別:"+sex);  
  58.             }  
  59.               
  60.               
  61.               
  62.         } catch (Exception e) {  
  63.             e.printStackTrace();  
  64.         }finally{  
  65.             JDBCUtils.release(conn, call, rs);  
  66.         }  
  67.     }  
  68. }  
package com.hwb.demo;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;




import org.junit.Test;

import oracle.jdbc.internal.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;

import com.hwb.db.JDBCUtils;
/**
 * 存儲過程  一個輸入參數,返回一個查詢結果集合
 * @author Administrator
 *
 */
public class CursorTest {

	/**
	 * create or replace package Mypackage as
		procedure queryUserList(uid in number,userList out usercursor);
		end mypackage;
	 */
	@Test
	public void testCursor(){
		String sql = "{call Mypackage.queryUserList(?,?) }";
		
		Connection conn = null;
		CallableStatement call = null;
		ResultSet rs = null;
		try {
			//得到數據庫連接
			conn = JDBCUtils.getConnection();
			//通過數據庫連接創建statement
			call = conn.prepareCall(sql);
			
			//對於輸入參數,賦值
			call.setInt(1, 1);
			//對於輸出參數,聲明
			call.registerOutParameter(2, OracleTypes.CURSOR);
			//執行調用
			call.execute();
			//將CallableStatement 強轉成  OracleCallableStatement 用來獲取光標類型Cursor,並得到結果ResultSet
			rs = ((OracleCallableStatement)call).getCursor(2);
			//遍歷 ResultSet
			while (rs.next()) {
				//根據類型和列名取值
				int id = rs.getInt("user_id");    //括號內為 列名
				String user_name = rs.getString("user_name");
				int age = rs.getInt("user_age");
				String sex = rs.getString("user_sex");
				System.out.println("查詢到的用戶信息:\n\tid:"+id+"\n\t姓名:"+user_name
						+"\n\t年齡:"+age+"\n\t性別:"+sex);
			}
			
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			JDBCUtils.release(conn, call, rs);
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM