1. 程式人生 > >Statement和PreparedStatement

Statement和PreparedStatement

Statement與PreparedStatement的關係和區別:

關係:PreparedStatement繼承自Statement,都是介面。

區別:PreparedStatement可以使用佔位符,是預編譯的,批處理比Statement效率高   。

   建立Statement是不需要傳參的,而建立PreparedStatement是需要傳入sql語句作為引數的。(原因:因為PreparedStatement是預編譯的,所以在建立PreparedStatement的時候,將sql語句傳入PreparedStatement的構造方法,而這個帶有引數的構造方法內部,就是處理預編譯的程式碼,作為預編譯。而Statement是沒有預編譯的,只能在執行的時候,具體傳入sql語句。)


 

在JDBC應用中,如果你已經是一個稍有水平的開發者,就應該學會熟練使用以PreparedStatement代替Statement,也就是說,在任何時候都儘量滴不要去使用Statement。

PreparedStatement 介面繼承 Statement,PreparedStatement 例項包含已編譯的 SQL 語句, 所以其執行速度要快於 Statement 物件。

 Statement為一條Sql語句生成執行計劃, 如果要執行兩條sql語句 

select colume from table where colume=1;select colume from table where colume=2; 

會生成兩個執行計劃 一千個查詢就生成一千個執行計劃! 

PreparedStatement用於使用繫結變數重用執行計劃 select colume from table where colume=:x; 

通過set不同資料只需要生成一次執行計劃,可以重用。

PreparedStatement的使用:

1 String sql = "select distinct loan_type from loan where bank=?";
2 PreparedStatement preStatement = conn.prepareStatement(sql);
3 preStatement.setString(1, "Citibank");
4 ResultSet result = preStatement.executeQuery();

Statement的使用:

1 String sql = "select * from users where username='" + username + "' AND " + "password='" + password + "'";
2 statement = connection.createStatement();
3 resultSet = statement.executeQuery(sql);

 


使用PreparedStatement的好處:

1.提高可讀性和可維護行

2.最大程度的提高效能。PreparedStatement的第一次執行消耗是很高的,它的效能體現在後面的重複執行(快取的作用),例如假設對錶中的某一個或某幾條資料進行鍼對查詢,JDBC驅動會發送一個網路請求到資料解析和優化這個查詢,而執行時會產生另一個網路請求。

3.防止SQL注入(PS:SQL注入產生的原因很簡單,就是訪問的使用者通過前端對網站可以輸入引數的地方進行提交引數,引數裡注入了一些惡意引數傳入到伺服器後端中,伺服器後端沒有對其進行詳細的安全過濾,導致傳入的引數直接傳到資料庫中,執行了資料庫的SQL語句,SQL語句是可以查詢網站的管理員賬號、密碼、以及一些其他資訊等等的敏感資料,這就是SQL的注入式攻擊。

 

 

 

好久沒貼圖了,給大夥來一個

&n