JDBC中Statement、PreparedStatement、CallableStatement的區別
阿新 • • 發佈:2018-12-17
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語句