createStatement與prepareStatement的區別

一.概念上

prepareStatement會先初始化SQL,先把這個SQL提交到數據庫中進行預處理,屢次使用可提升效率。   
sql

createStatement不會初始化,沒有預處理,每次都是從0開始執行SQL。數據庫


二.變量上

prepareStatement能夠在SQL中用?替換變量xss

代碼以下:函數

int sid=1001; 
ps=conn.prepareStatement("select * from Cust where ID=?"); 
int s=1001; 
ps.setInt(1, s); 
rs = ps.executeQuery();

createStatement不支持?替換變量,只能在sql中拼接參數性能

int sid=1001; 
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);


三.適用上

Statement   ─   由方法   createStatement   所建立。Statement   對象用於發送簡單的   SQL   語句。spa

PreparedStatement   ─   由方法   prepareStatement   所建立。PreparedStatement   對象用於發送帶有一個或多個輸入參數(   IN   參數)的   SQL   語句。PreparedStatement   擁有一組方法,用於設置   IN   參數的值。執行語句時,這些   IN   參數將被送到數據庫中。PreparedStatement   的實例擴展了   Statement   ,所以它們都包括了   Statement   的方法。PreparedStatement   對象有可能比   Statement   對象的效率更高,由於它已被預編譯過並存放在那以供未來使用。code

CallableStatement   ─   由方法   prepareCall   所建立。CallableStatement   對象用於執行   SQL   儲存程序   ─   一組可經過名稱來調用(就象函數的調用那樣)的   SQL   語句。CallableStatement   對象從   PreparedStatement   中繼承了用於處理   IN   參數的方法,並且還增長了用於處理   OUT   參數和   INOUT   參數的方法。orm

如下所列提供的方法能夠快速決定應用哪一個Connection方法來建立不一樣類型的SQL 語句:  
createStatement   方法用於:       簡單的SQL語句(不帶參數)   
對象

prepareStatement  方法用於:帶一個或多個IN參數的SQL語句常常被執行的簡單SQL語句 繼承

prepareCall   方法用於:  調用已儲存過程


四.總結

我的認爲,不管從代碼的可讀性和可維護性,仍是從提升性能方面,或者說避免xss攻擊方面,都應該使用prepareStatement。

相關文章
相關標籤/搜索