在java應用程式下呼叫儲存函式,儲存過程,包
建立connection連結,釋放關閉連結
package demo.untils; 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="scott"; private static String password="tiger"; //註冊資料庫的驅動 static{ try { Class.forName(driver);//採用java反射機制,必然會丟擲異常 //DriverManager.registerDriver(driver);//一般不採用java提供的這個方法註冊驅動 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //獲取資料庫連結 public static Connection getConnection(){ try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null;//如果不成功,測沒有獲取資料庫的連結 } //釋放資料庫的資源 public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs=null;//讓rs迅速成為java垃圾回收的物件 } } if(st!=null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ st=null; } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ conn=null; } } } }
呼叫儲存過程
呼叫儲存函式package demo.oracle; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import oracle.jdbc.OracleTypes; import org.junit.Test; import demo.untils.JDBCUtils; public class TestProcedure { /* *create or replace procedure queryempinform(eno in number, pename out varchar2, psal out number, pjob out varchar2) */ @Test public void testprocedure(){ //{call <procedure-name>[(<arg1>,<arg2>, ...)]} String sql = "{call queryempinform(?,?,?,?)}"; Connection conn =null; CallableStatement call =null; try { //得到一個連結 conn=JDBCUtils.getConnection(); //通過連結創建出statement call=conn.prepareCall(sql); //對於in引數,賦值 call.setInt(1, 7839); //對於out引數 ,宣告 call.registerOutParameter(2, OracleTypes.VARCHAR); call.registerOutParameter(3, OracleTypes.NUMBER); call.registerOutParameter(4, OracleTypes.VARCHAR); //執行呼叫 call.execute(); //取出結果 String name = call.getString(2); double salary = call.getDouble(3); String job = call.getString(4); System.out.println(name+"\t"+salary+"\t"+job); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtils.release(conn, call,null); } } }
呼叫包,要注意下出out引數的強制型別轉換package demo.oracle; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import oracle.jdbc.OracleTypes; import org.junit.Test; import demo.untils.JDBCUtils; public class TestFunction { /* create or replace function queryempincome(eno in number) return number */ @Test public void testFunction(){ //{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} String sql ="{?= call queryempincome(?)}"; Connection conn = null; CallableStatement call= null; try { //得到資料庫連結 conn=JDBCUtils.getConnection(); //基於連結建立statement call = conn.prepareCall(sql); //對於輸出引數,宣告 call.registerOutParameter(1, OracleTypes.NUMBER); //對於輸入引數,賦值 call.setInt(2, 7839); //執行呼叫 call.execute(); //取出年收入的結果(儲存函式的結果) double income = call.getDouble(1); System.out.println("該員工的年收入是:"+income); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtils.release(conn, call, null); } } }
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestCursor {
/*
create or replace PACKAGE MYPACKAGE AS
type empcursor is ref cursor;
procedure queryEmpList(dno in number,empList out empcursor);
END MYPACKAGE;
*/
@Test
public void testcursor(){
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call MYPACKAGE.queryEmpList(?,?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
//建立資料庫連結
conn = JDBCUtils.getConnection();
//基於連結建立statement
call = conn.prepareCall(sql);
//對於in引數, 賦值
call.setInt(1, 20);
//對於out,引數,宣告
call.registerOutParameter(2, OracleTypes.CURSOR);
//執行呼叫
call.execute();
//取出該部門的所有員工資訊
//所有介面都有實現類,不同的是將sql java的介面轉換成oracle資料庫的介面
rs = ((OracleCallableStatement)call).getCursor(2);
while(rs.next()){
//取出該員工的工號,姓名,薪水,職位
int empno = rs.getInt("empno");
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
String job = rs.getString("empjob");
System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}
相關推薦
在java應用程式下呼叫儲存函式,儲存過程,包
建立connection連結,釋放關閉連結 package demo.untils; import java.sql.Connection; import java.sql.DriverManage
如何從 VC WebBrowser 應用程式中呼叫指令碼函式
為了呼叫指令碼函式存在的網頁上,您必須使用自動化 ; 換句話說,IDispatch。 使用以下步驟來呼叫指令碼函式從 Visual C++ 應用程式的網頁上存在的: 獲取在 HTML 文件的 IDispatch。 呼叫利用 IDispatch:: GetIDsOfName
VisualVM(8) 查詢JAVA應用程式耗時的方法函式
Java虛擬機器效能管理神器 - VisualVM(8) 查詢JAVA應用程式耗時的方法函式 1.為什麼要監控? JAVA程式在開發前,根據設計文件的效能需求,是要對程式的效能指標進行
mac下資料庫工具Sequel pro安裝總是安裝不到Launchpad應用程式下,每次開機都要重灌的解決方法
1、首先到Mac系統下安裝HomeBrew Homebrew是一款Mac OS平臺下的軟體包管理工具,擁有安裝、解除安裝、更新、檢視、搜尋等很多實用的功能。簡單的一條指令,就可以實現包管理,而不用你關心各種依賴和檔案路徑的情況,十分方便快捷。 開啟終端,輸入以下指令 /usr/b
編寫一個Java應用程式,當用戶在輸入對話方塊中輸入兩個日期後(日期格式為YYYYMMDD,如1999年1月12日應輸入為19990112),程式將判斷兩個日期的先後順序,以及兩個日期之間的間隔天數(例
編寫一個Java應用程式,當用戶在輸入對話方塊中輸入兩個日期後(日期格式為YYYYMMDD, 如1999年1月12日應輸入為19990112), 程式將判斷兩個日期的先後順序, 以及兩個日期之間的間隔天數(例如1999年1月1日和1999年1月2日之間的間隔是1天。
<Java>完成一個“可以由使用者鍵入文字內容,並輸出其字元個數”的Java應用程式
一、任務目標 完成一個 java application應用程式,可以接收使用者通過鍵盤輸入的文字,並輸出此段文字字元的個數。 二、Scanner類 Scanner是JDK1.5新增的一個類,可以使用該類建立一個物件。它是一個可以使用正則表示
C#/WPF 應用程式A 呼叫WPF編寫的應用程式B的exe時,引數傳遞問題
經過驗證該方法可行,注意:引數可以多個傳入,以空格分隔開的; WPF中, 應用程式A 呼叫WPF編寫的應用程式B的exe,引數傳遞給B的 主要方法: 1、在App.xaml.cs中的App類中,過載
編寫一個Java 應用程式,計算兩個大整數的和、差、積和商,並計算一個大整數的因 子個數(因子中不包括1 和大整數本身)。
1 package ex6_2; 2 import java.math.BigInteger; 3 4 public class BigintegerExample { 5 public static void main(String[] args) { 6
編寫一個Java 應用程式,使用者從輸入對話方塊輸入了兩個日期,程式將判斷兩個日期的 大小關係,以及兩個日期之間的間隔天數。
1 package ex6_1; 2 3 import java.sql.Date; 4 import java.util.Calendar; 5 6 import javax.swing.JOptionPane; 7 8 public class DateExample { 9
猜數字遊戲。編寫一個Java應用程式,實現功能:
import javax.swing.JOptionPane; public class GuessNumber { public static void main (String args[ ]) {
java -Xms -Xmx設定java應用程式執行的記憶體大小,Xms Xmx PermSize MaxPermSize 區別
Eclipse崩潰,錯誤提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you ex
2. 編寫一個Java應用程式,使用者從鍵盤輸入一個1~9999之間的數,程式將判斷這個數是幾位數,並判斷這個數是否是迴文數。迴文數是指將該數含有的數字逆序排列後得到的數和原數相同,例如12121、32
import javax.swing.JOptionPane; public class TestNumber { public static void main(String args[]) { loopNumber
在Java程式中呼叫C函式--列印"HelloWorld"
本文是將書中的第二章單獨抽出來,紅色部分為譯者注. 1.概述 這個列印的過程是用JDK或Java 2 SDK寫一個簡單的Java程式,程式會呼叫一個C函式列印"HelloWorld".這個過程將包括以下步驟: 建立一個Java類(HelloWorld.java),以及定義一
寫一個Java應用程式,輸入一個數求其平方和立方
package day20170107; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class InputData {public
[基礎題] 5.(*)按如下要求編寫Java應用程式:(1)編寫一個用於表示戰鬥能力的介面Fightable,
/*5.(*)按如下要求編寫Java應用程式: (1)編寫一個用於表示戰鬥能力的介面Fightable, 該介面包含:整型常量MAX; 方法void win(),用於描述戰鬥者獲勝後的行為; 方法int injure(int x),用於描述戰鬥者受傷後的行為。 (2)編寫一
開發筆記9 | 部署 Java 應用程式到阿里雲 EDAS
前言 在之前的一篇文章中,我們介紹了 如何將一個本地的 Java 應用程式直接部署到阿里雲 EDAS ,有不少讀者反饋,如果目前已經在使用阿里雲 EDAS 了,那該如何配合這個外掛部署應用呢?在本文中,我們來介紹 部署 Java 應用程式到阿里雲 EDAS。 關於 EDAS EDAS 是一個圍繞應用和微
應用程序實現對其他應用程式的呼叫
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Fiddler監聽Java應用程式http請求方法(Configure a Java Application to Use Fiddler)
Fiddler官網:http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureJavaApp Configure a Java Application to Use Fiddler 要配置Java應用程式以向Fiddle
iOS應用程式如何呼叫以太坊智慧合約
以太坊智慧合約有各種各樣的用例,但到目前為止,從你的iOS應用程式中呼叫它們非常困難。不過如果使用以太坊iOS開發套件和EtherKit,這種情況會改善很多,你可以立即開始使用。在本教程結束時,你將能夠呼叫其ABI(應用程式二進位制介面)中定義的任何公共合約函式。 對於這個專案,我們將使
Java應用程式效能監控
Java應用程式效能監控 您想知道Java Runtime環境的執行狀況嗎? 您想監控執行緒死鎖、異常記憶體、CPU消耗和Java應用程式嗎? 監控Java應用程式 利用ManageEngine Applications Manager Java Runtime 監控功能,可以監