Java調用oracle存儲過程通過游標返回臨時表數據


注:本文來源於 《  Java調用oracle存儲過程通過游標返回臨時表數據   》

Java調用oracle存儲過程通過游標返回臨時表數據

 

 

  項目開發過程中,不可避免的會用到存儲過程返回結果集。特別是選擇Oracle做為數據庫時,就更麻煩了,因為Oracle存儲過程和SQLServer的有點不太一樣,直接返回不了結果集,那么怎么才能在使用Oracle的情況下返回結果集,程序代碼中怎么獲取到那,請看下面幾篇:

       1.存儲過程返回結果集

       2.Java中執行存儲過程以及多結果集處理

       3.返回臨時表中數據

 

 

 

  1 package com.zjhcsoft.test.utl;
  2 
  3 import java.sql.CallableStatement;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.ResultSet;
  7 
  8 import oracle.jdbc.OracleCallableStatement;
  9 import oracle.jdbc.driver.OracleTypes;
 10 
 11 public class TestOracleProc3 {
 12 
 13 	/**
 14 	 * @param args
 15 	 */
 16 	public static void main(String[] args) {
 17 		try {
 18 			Class.forName("oracle.jdbc.driver.OracleDriver");
 19 		} catch (Exception e) {
 20 			e.printStackTrace();
 21 		}
 22 
 23 		Connection conn = null;
 24 		String DBurl = "jdbc:oracle:thin:@134.98.8.168:1521:ora817";
 25 		try {
 26 			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
 27 			System.out.println("Getting Connection...");
 28 			conn.close();
 29 		} catch (Exception e) {
 30 			e.printStackTrace();
 31 		}
 32 
 33 		try {
 34 			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
 35 			long start = System.currentTimeMillis();
 36 			//最關鍵一步
 37 			conn.setAutoCommit(false);
 38 			OracleCallableStatement cstmt = (OracleCallableStatement)conn.prepareCall("{call sfz_obj.proc_sfz_proc_test(?,?)}");
 39 			cstmt.setString(1, "");
 40 			cstmt.registerOutParameter(2,OracleTypes.CURSOR);
 41 			cstmt.execute();
 42 			long end = System.currentTimeMillis();
 43 			System.out.println("this procedure consumes "+((end-start)/1000)+" excute time.");
 44 			start = System.currentTimeMillis();
 45 			int i=0;
 46 			ResultSet rs = (ResultSet)cstmt.getObject(2);
 47 			   while (rs.next()) {
 48 				   System.out.println("column"+(i+1)+":"+rs.getString(1)+",  "+rs.getString(2)+",  "+rs.getString(3));
 49 				   i++;
 50 			   }
 51 			   System.out.println("this procedure has "+(i-1)+" data.");
 52 			end = System.currentTimeMillis();
 53 			System.out.println("show this procedure data consumes "+((end-start)/1000)+" excute time.");
 54 			conn.commit();
 55 			cstmt.close();
 56 			conn.close();
 57 		} catch (Exception e) {
 58 			e.printStackTrace();
 59 		}
 60 	}
 61 
 62 }
 63 

 

 

 

 

 

 

 

 

 

 

————————————————————————————————————————————————————————————————————————————————————————————


免責聲明!

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



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