1. 程式人生 > >JDBC中Statement、PreparedStatement、CallableStatement的區別

JDBC中Statement、PreparedStatement、CallableStatement的區別

1、Statement

作用:執行不含引數的靜態SQL語句。

用法:使用JDBC的Connection例項呼叫createStatement()方法建立一個Statement例項。通過Statement例項的execute()、executeQuerry()或executeUpdate()方法來執行SQL語句。

例:查詢Student表中的所有記錄

Statement stmt = con.createStatement();  //建立Statement物件,其中con為Connection物件

ResultSet rs = statement.executeQuerry("SELECT * FROM Student");
//使用executeQuerry()執行查詢語句,其中返回ResulSet型查詢結果

2、PreparedStatement

是Statement的子介面

作用:執行含有引數的動態SQL語句。其中含引數的動態的SQL語句是指在程式執行時能動態地為SQL語句賦引數值。

用法:使用JDBC的Connection例項呼叫prepareStatement()方法建立一個PrepareStatement例項。與Statement相同的是,PrepareStatement介面同樣含有executeQuerry()和executeUpdate()方法。但在呼叫執行函式前,需要首先對SQL語句賦予引數值。

例:查詢Student表中的“小明”同學

String sql = "SELECT * FROM Student WHERE Sname = ?";
//執行查詢的sql語句,這裡?是引數的位置

PreparedStatement ps = con.prepareStatement(sql);
//建立名為ps的PreparedStatement例項,其中con為Connection例項

ps.setString(1,"小明");
//此處是給sql語句中的引數賦值,1代表第一個引數,由於"小明"是String型,故用setString();

Resultset rs = ps.executeQuerry();
//執行sql語句,並返回Resultset型結果

3、CallableStatement

是PreparedStatement的子介面

作用:用於呼叫資料庫的儲存過程。(什麼是儲存過程?)

用法:使用JDBC的Connection例項呼叫prepareCall()方法建立一個CallableStatement例項,其中引數為呼叫儲存過程的sql語句。之後的執行語句與上面相同。

注:CallableStatement繼承了PreparedStatement的方法(用於處理IN引數),其自身新增了用於處理OUT引數和INOUT引數的輸出部分。(什麼是IN、OUT、INOUT引數?)

例:這裡假設儲存過程為2中的查詢語句,名為st_SearchName()

CallableStatement cs = con.prepareCall("{call st_SearchName(?)}");
//建立callableStatement例項,其中con是Connection例項

cs.setString(1,"小明");
//為IN引數賦值

ResultSet rs = cs.executeQuery();
//執行sql語句