java調用oracle存儲過程_做一點,記一點 ~ Java調用Oracle存儲過程

一、需求

傳入一個參數,返回一條或多條記錄(列表)。

二、實現步驟

1. 編寫Oracle存儲過程。

--?聲明包和包體的語句應該分兩次執行,即使聲明在前定義在后,如果一起執行依然會編譯出錯

--調用能夠返回多條記錄的存儲過程需要定義在包內

--聲明包及包內的游標、存儲過程

CREATE OR REPLACE PACKAGE pack_myPackage ISTYPE myCursorIS REF CURSOR;PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, myCursor OUT myCursor);ENDpack_myPackage;--定義包體

CREATE OR REPLACE PACKAGE BODY pack_myPackage IS

PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, outcursor OUT myCursor) IS

BEGIN

OPEN outcursor FORSELECT * FROM tableA WHERE P_NO =pNo;ENDproc_querySomeInfo;END pack_myPackage;

2. 編寫Java代碼

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call pack_myPackage.proc_getSomeInfo(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs= (ResultSet) cstmt.getObject(2);if (rs != null) {while(rs.next()) {

System.out.println(rs.getString(1));

}

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

三、 其他需求

1. Java調用有返回值的Oracle存儲過程(返回一個簡單類型的值)

(1)定義存儲過程:

CREATE OR REPLACE PROCEDURE proc_A(param1 IN VARCHAR2, param2 OUT VARCHAR2)AS

BEGIN

SELECT name INTO param2 FROM T_A WHERE id =param1;END;

(2)編寫Java代碼:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_A(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

cstmt.execute();

System.out.println("Output is:" + cstmt.getString(2));}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

2. Java調用無返回值的Oracle存儲過程(無返回值)

(1)定義存儲過程:

CREATE OR REPLACE PROCEDURE proc_B(param1 IN VARCHAR2, param2 IN VARCHAR2)AS

BEGIN

INSERT INTO T_B VALUES(param1, param2);END;

(2)編寫Java代碼:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_B(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.setString(2, "TEST");

cstmt.execute();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

四、相關知識

1. 在plsql developer中測試存儲過程時可以在存儲過程名上右擊選擇 “測試” ,如果需要提供參數可以在下方填入參數,如果沒有參數則點擊執行按鈕即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529388.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 從控制臺讀取_轉載 java從控制臺讀取輸入的方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class MainClass { public static void method1() { //使用Scanner Scanner scannernew Sca…

trace java_使用java動態字節碼技術簡單實現arthas的trace功能。

參考資料用過[Arthas]的都知道,Arthas是alibaba開源的一個非常強大的Java診斷工具。不管是線上還是線下,我們都可以用Arthas分析程序的線程狀態、查看jvm的實時運行狀態、打印方法的出入參和返回類型、收集方法中每個代碼塊耗時,甚至可以監控…

順時針小球圓周運動Java編程_如何使用CSS實現圓周運動小球的實例

我們時常在頁面中見到一些動畫效果,這些動畫效果,很多可以僅通過CSS來實現。在這里我們用到了CSS3的animation屬性。animation 屬性是一個簡寫屬性,用于設置六個動畫屬性:animation-name 規定需要綁定到選擇器的 keyframe 名稱。a…

java swing 外觀框架_【GUI】一、Swing外觀框架BeautyEye使用

一、Swing外觀框架BeautyEye使用1.1 導包1.2 使用BeautyEye L&Fpublic static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {// 國人牛逼主題,值得學習// 初始化字體InitGlobalFont(new Font("微軟雅黑", F…

static詳解java_java中static作用詳解

static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念。被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的實例&…

java基礎案例教程前4章知識點_java學習記錄4 Java基礎知識點

java學習記錄4 Java基礎知識點1. 注釋單行注釋使用“//”開頭,后面是注釋的內容一般在要注釋的語句的上面加注釋多行注釋以“/*”開頭,以“*/”結尾可以做行內注釋不可嵌套使用文檔注釋以“/**”開頭,以“*/”結尾用來給類和方法做注釋&#…

打印狗的健康值Java_嵌入式狗的JAVA之路 HTML 補課

學了JAVA WEB應用,補充一下HTML的標簽,常用的,不然頁面都畫不出來了~~test 標題,h1h2h3 3個字號test 段落link 鏈接 使用 Target 屬性,你可以定義被鏈接的文檔在何處顯示。下面的這行會在新窗口打開文檔:Vi…

mysql 表2符合表1_MYSQL-表1和表2中所有可能性的所有行

表用戶id, name1, Jay Bob2, An Other表格頁id, name, html1, Welcome, Welcome to this page2, Goodbye, Thanks for visiting表user_pages **存儲頁面的用戶特定版本**user_id, page_id, html1, 1, User id 1 Welcome page我基本上需要一個查詢,該查詢將為我返回以下數據集-即…

java引擎組件_Java 腳本引擎入門

Java Script EngineJava 腳本引擎可以將腳本嵌入Java代碼中,可以自定義和擴展Java應用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期還可能會換。腳本引擎包位于jav…

python 角度傳感器模擬_python樹莓派紅外反射傳感器

本文實例為大家分享了python樹莓派紅外反射傳感器的程序,供大家參考,具體內容如下1、工具rpi3,微雪ARPI600,Infrared Reflective Sensor2、基本原理Infrared Reflective Sensor 輸出數字和模擬信號模擬信號通過ARPI600上的AD轉換芯…

JAVA awt eventqueue_線程“AWT-EventQueue-1”中的異常java.lang.NullPointerException

嗨,我收到錯誤Exception in thread "AWT-EventQueue-1" java.lang.NullPointerExceptionat P6.itemStateChanged(P6.java:215)at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2023)at javax.swing.AbstractButton$Handler.item…

java構造方法賦值內存圖_java 面向對象(九):類的結構:構造器(一)簡介;屬性賦值順序;JavaBean的概念...

1.構造器(或構造方法):Constructor構造器的作用:* 1.創建對象* 2.初始化對象的信息2.使用說明:* 1.如果沒顯式的定義類的構造器的話,則系統默認提供一個空參的構造器* 2.定義構造器的格式:權限修飾符 類名(形參列表){}…

java 集合modcount_源碼|jdk源碼之LinkedList與modCount字段

鏈表是對上一篇博文所說的順序表的一種實現。與ArrayList思路截然不同,鏈表的實現思路是:不同元素實際上是存儲在離散的內存空間中的。每一個元素都有一個指針指向下一個元素,這樣整個離散的空間就被“串”成了一個有順序的表。從鏈表的概念來…

idea 新建ssm java ee_IDEA搭建SSM項目實現增刪改查

首先打開IDEA,File—>New—>Project創建項目選擇左側導航欄里的Maven,勾上勾,選擇webapp按如下圖進行填寫創建完成后進入項目,右下角彈出的提示點擊右邊的Enable Auto-Import,自動配置連接數據庫,我用…

php mail centos_centos怎么發送郵件

一、安裝sendmail與mail1、安裝sendmail:1) centos下可以安裝命令:yum -y install sendmail2) 安裝完后啟動sendmail命令:service sendmail start2、安裝mail安裝命令:yum install -y mailx二、發送郵件1、通過文件內容發送發送命…

php文件的作用,php入口文件的作用-PHP問題

php入口文件的作用php入口文件能夠完成主動加載性能。解析PHP入口文件的主動加載性能php的主動加載:正在php5之前,咱們要用某個類或類的辦法,那必需include或許require,之后能力應用,每一次用一個類,都需求…

emacs php 配置文件,如何配置emacs進行正確的PHP開發?

我使用web模式(http://web-mode.org/)混合HTML / PHP文件和php模式為純PHP文件.最新版本的php-mode還推薦使用混合HTML / PHP文件的Web模式:https://github.com/ejmr/php-mode#avoid-html-template-compatibility.不同于其他模式,如mmm模式,mumamo或多網絡模式,嘗試…

php 5.3.9 漏洞,PHP-5.3.9遠程執行任意代碼漏洞(CVE-2012-0830) 詳解

這個新的修復方法初衷是好的, 但是卻帶來一個嚴重的問題(5.3.10中已經修復), 這個問題最初是由Stefan Esser發現的. 請看之前(5.3.9)最終的修復方案(php_register_variable_ex):代碼如下while (1) {if (zend_symtable_find(symtable1, escaped_index, index_len 1, (void **) …

java中隨機數邊界問題,java 簡單Dice問題(隨機數的運用)

[java]代碼庫/*** Dice Write a program that simulates rolling two dice using the following* steps: 1. Prompt the user for the number of sides for two dice. 2. “Roll” the* dice three times by generating a random number between 1 (inclusive) and the* number…

php 正則替換 ubb,php實現過濾UBB代碼的類

本文實例講述了php實現過濾UBB代碼的類。分享給大家供大家參考。具體如下:PHP代碼如下:class Day{function ubb($Text) { /// UBB代碼轉換//$Texthtmlspecialchars($Text);//$Textereg_replace("\r\n","",$Text);$Textereg_rep…