1. 程式人生 > >Java執行Oracle儲存過程並接收返回值

Java執行Oracle儲存過程並接收返回值

Java執行Oracle儲存過程並接收多個返回值(集合/數值)

Java程式碼:

package com.pure.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DBHelper {

	public Connection getConnection(){
		Connection conn=null;
		try{
			//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//SqlServer
			//conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test", "sa", "123");
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test","root","123");

		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}
	public void close(ResultSet rs,PreparedStatement ps,Connection conn){
		try{
			if(rs!=null){
				rs.close();
			}
			if(ps!=null){
				ps.close();
			}
			if(conn!=null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		DBHelper db=new DBHelper();
		System.out.println(db.getConnection());
	}
}

package test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import oracle.jdbc.OracleTypes;
import com.util.DBHelper;

public class Test {
	/**
	 * jar執行Test類  -- cmd中執行test.jar
	 * java -jar test.jar 14 
	 * @param args
	 */
	public static void main(String[] args) {
		//System.out.println("數量="+testCall(parseInt(args[0]))); //jar執行
		System.out.println("數量="+testCall(14));
	}
	public static int testCall(int param){
		DBHelper db=new DBHelper();
		Connection conn= db.getConnection();
		
		int count = 0;
		try{
			CallableStatement call=conn.prepareCall("{call sp_test_1(?,?,?)}");//執行sp_test_1儲存過程(注:儲存過程接收引數和輸出引數Java都有打?問號)
			call.setInt(1, param);//設定引數
			call.registerOutParameter(2, OracleTypes.INTEGER);//接收返回值
			call.registerOutParameter(3,OracleTypes.CURSOR);//接收返回值
			call.execute();//執行
		
			count=call.getInt(2); //拿取儲存過程返回值 
			
			
			List<Map> list=new ArrayList<Map>(); 
			//ResultSet rs=call.getResultSet();
			ResultSet rs=(ResultSet)call.getObject(3);//拿取儲存過程返回的集合
			while(rs.next()){
				Map map=new HashMap();
				map.put("id", rs.getInt("ID"));
				map.put("user_name", rs.getString("USER_NAME"));
				map.put("login_name", rs.getInt("LOGIN_NAME"));
				list.add(map);
			}
			
			System.out.println("listSize="+list.size());
			
		
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			
		}
		return count;
	}
	public static int parseInt(Object obj){
		try{
			return Integer.parseInt(obj.toString());
		}catch(Exception e){
			return 0;
		}
	} 
}
oracle儲存過程:
/*
 * oracle儲存過程測試 
*/
CREATE OR REPLACE PROCEDURE sp_test_1(
   param1 in int,     --輸入引數
   out_int out int,     --返回值int
   out_list out SYS_REFCURSOR  --返回集合
)
is 
   val_1 int; --全域性變數

begin

     select  count(1) into val_1 from pd_system_user where id = param1;
     out_int := val_1;
     --設定結果集
     open out_list for select * from pd_system_user where id <= param1;
     
     --dbms_output.put_line(out_return); --列印
end sp_test_1;

-- 演示儲存過程
/*
declare --宣告變數
param1 varchar2(100);
val_1 int;

begin 
      param1 := 14; --變數賦值
      --select val_1 := count(1) from pd_system_user where id = param1; --不行
      select  count(1) into val_1 from pd_system_user where id = param1;
      --val_1 := param1;
      dbms_output.put_line(val_1);--列印語句
end;
*/

執行結果:



相關推薦

Java執行Oracle儲存過程接收返回

Java執行Oracle儲存過程並接收多個返回值(集合/數值) Java程式碼: package com.pure.util; import java.sql.Connection; import java.sql.DriverManager; import java.s

Java呼叫Oracle儲存過程(無返回

無返回值: 1:建立儲存過程 此儲存過程向表中插入一條資料 create or replace procedure demo_procedure(id varchar2,name varchar2,age varchar2,sex varchar2,address va

Yii2.0呼叫sql server儲存過程獲取返回

1、首先展示建立sql server儲存過程的語句,建立一個簡單的儲存過程,測試用。 1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 6 CREATE PROCEDURE [dbo].[register_info]

Java 執行資料庫儲存過程返回

前提是載入資源DataSource private JdbcTemplate jdbcTemplate; Java 呼叫儲存過程: @Override public String oneUniscInfoHisToDm(final Str

C#呼叫Oracle儲存過程返回結果集

1.建立一個儲存過程: createorreplaceprocedure GET_PERSON ( RC1 outsys_refcursor, RC2 outsys_refcursor ) is begin open RC1 for select * from PERSO

pl/sql 建立執行oralce儲存過程,返回結果集

因為以前一直用sql server多,現在一下子用oracle ,工具什麼都不熟,侷限於sql server的思想  網上搜,和問朋友,跟我講了一大堆,什麼loop 啊,decalre啊,package啊,什麼命令視窗啊,什麼 sql plus啊,什麼不支援pl/sql啊.

通過shell指令碼呼叫oracle儲存過程加入定時任務

例項 檔名:add_tab_partitions.sh #!/bin/sh username='waep' password='czty_waep' sqlplus -S ${username}/

用動態sql執行oracle儲存過程

     1、呼叫procedure:          v_sql  := 'Begin pkg_name.procedure_name(:in_v1, :in_v2, :out_v1, :out_v2); End;' ;           EXECUTE IMMEDI

callable介面配合ExecutorService實現多執行緒處理資料,接收返回(2018-08-23)

/** * @author chenzhen * Created by chenzhen on 2018/8/22. */ @Data public class QuickPullGit implements Callable<ArrayList&l

linux shell 執行oracle儲存過程

在linux下用shell執行oracle的儲存過程 #### 函式 #### 說 明:執行oracle儲存過程 #### 輸入引數:{資料庫tns}{資料庫使用者名稱}{資料庫密碼}{儲存過程名}{批處理日期} #### 輸出引數:儲存過程執行結果 function

java呼叫oracle儲存過程例子

1,導jar包---ojdbc6.jar 2,建立一個分頁儲存過程 create or replace procedure my_page(v_in_tableName in varchar2,

工作總結24 Windows的任務計劃,定時執行oracle儲存過程或語句塊

1、在pl/sql中,建立一個儲存過程 create or replace procedure pro as begin    /***業務程式***/   commit; end pro; 2、在某

java中呼叫儲存過程傳遞list集合引數的方法

sql: CREATE OR REPLACE TYPE test as object( FID NUMBER,  NUM nVARCHAR2(30),  TESKID NUMBER,  CID NUMBER, USERCODE nVARCHAR2(100) ) CREA

java呼叫oracle儲存過程總結

這段時間開始學習寫儲存過程,主要原因還是因為工作需要吧,本來以為很簡單的,但幾經挫折,豪氣消磨殆盡,但總算搞通了,為了避免後來者少走彎路,特記述與此,同時亦對自己進行鼓勵。 一:無返回值的儲存過程 儲存過程為: CREATE OR REPLACE PROCEDURE TES

Java呼叫Oracle儲存過程

步驟: 1、編寫Oracle儲存過程 2、編寫資料庫獲取連線工具類 3、編寫簡單應用呼叫儲存過程 實現: 1、Oracle儲存過程: /*測試表*/ create table test( id varchar2(32)

java後臺發送請求獲取返回

otto wid eight quest 所有 ica 輸出流 lds thead 項目中需要前端發送請求給後端,而後端需要從另一個平臺中取數據然後再透傳給前端,通過下述代碼將其實現.在此記錄一下.package com.autotest.utils;import java

VB6下的ado Command呼叫儲存過程,讀取返回

最近在給老程式(VB6+SQL2005+水晶報表)新增備份、恢復資料庫功能。真心是手動備份資料庫太勞累,且顯得不專業,呵呵。呼叫sp_addumpdevice過程時,發生這SP有返回值,度娘了一圈,很少有提出儲存過程返回值如何在ADO Command中如何引用。 瞎寫的程式

java傳list到Oracle儲存過程執行

儲存過程功能是迴圈對list遍歷,對錶進行插入操作,插入異常則進行修改操作。 可能為update語句執行慢,可是表裡有主鍵,update時主鍵為條件,走主鍵應該不會慢。 單獨把update語句拿出執行,不慢。 最終找出原因,list中物件用的為nvarchar而表裡主鍵為varchar2,執行語句時Or

Oracle儲存過程請求WebService解析返回報文

WebService請求報文: <soapenv:Envelope xmlns:soapenv="" http://schemas.xmlsoap.org/soap/envelope/ ""> <soap:Header xmlns:soap="" htt

Java執行cmd命令接收返回結果

String command="ipconfig -all"; String s="IPv4"; String line = null; StringBuilder sb = new S