使用JDBC操作預存程序,jdbc操作預存程序

來源:互聯網
上載者:User

使用JDBC操作預存程序,jdbc操作預存程序

 

使用JDBC操作預存程序,可以藉助於一個借口CallableStatement實現。

此時調用預存程序的sql語句為:{call procedure_name [(arg1),(arg2)]}

而CallableStatement可以通過資料庫連接對象的prepareCall()方法獲得

例如:

conn.prepareCall(sql);

如果此時的預存程序有輸出參數,可以通過他的registerOutParameter()方法將輸出參數註冊為JDBC類型。例如:

registerOutParameter(int parameterIndex,int sqlType)

下面看一個統計學生人數樣本,首先看資料庫中的記錄:

不難看出學生表中公有七條記錄。

下面寫一個預存程序統計學生表中的人數。

create or replace procedure getStudentCount(v_student out number) isbegin  select count(*) into v_student from student;end getStudentCount;

然後測試一下這個預存程序:

declare  v_count number;begin  getstudentCount(v_count);  dbms_output.put_line(v_count);end;

輸出結果為7。預存程序沒有問題。

然後在看如何使用JDBC調用預存程序。

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class ProcedureDemo {public static void main(String[] args) {Connection conn = null;int studentCount = 0;try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "myhr", "myhr");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}String sql = "{call getStudentCount(?)}";try {CallableStatement proc = conn.prepareCall(sql);proc.registerOutParameter(1, java.sql.Types.INTEGER);proc.execute();studentCount = proc.getInt(1);} catch (SQLException e) {e.printStackTrace();}System.out.println(studentCount);}}

這時在控制台輸出7,證明調用預存程序成功。
 

 


對於jdbc調用預存程序的問題

那說明sun的驅動比SQLServerDriver的相容性好啊

你要用jdbc,就得按標準的jdbc來跑,execute就夠了,別用executeQuery……
 
JDBC使用步驟過程

JDBC串連資料庫
•建立一個以JDBC串連資料庫的程式,包含7個步驟:
1、載入JDBC驅動程式:
在串連資料庫之前,首先要載入想要串連的資料庫的驅動到JVM(Java虛擬機器),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程式類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的執行個體註冊到DriverManager類中。
2、提供JDBC串連的URL
•串連URL定義了串連資料庫時的協議、子協議、資料來源標識。
•書寫形式:協議:子協議:資料來源標識
協議:在JDBC中總是以jdbc開始 子協議:是橋串連的驅動程式或是資料庫管理系統名稱。
資料來源標識:標記找到資料庫來源的地址與串連連接埠。
例如:
(MySql的串連URL)
jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:
表示使用Unicode字元集。如果characterEncoding設定為 gb2312或GBK,本參數必須設定為true 。characterEncoding=gbk:字元編碼方式。
3、建立資料庫的串連
•要串連資料庫,需要向java.sql.DriverManager請求並獲得Connection對象, 該對象就代表一個資料庫的串連。
•使用DriverManager的getConnectin(String url , String username , String password )方法傳入指定的欲串連的資料庫的路徑、資料庫的使用者名稱和 密碼來獲得。
例如: //串連MySql資料庫,使用者名稱和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con = DriverManager.getConnection(url , username , password ) ;
}catch(SQLException ......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.