JDBC中Statement、PreparedStatement 、CallableStatement 區別和聯繫

Statement、PreparedStatement 、CallableStatement 區別和聯繫

1. Statement、PreparedStatement和CallableStatement都是接口(interface)。

2. Statement繼承自Wrapper、PreparedStatement繼承自Statement、CallableStatement繼承自PreparedStatement。

3. Statement接口提供了執行語句和獲取結果的基本方法;

    PreparedStatement接口添加了處理 IN 參數的方法;

    CallableStatement接口添加了處理 OUT 參數的方法。

4. a. Statement:

        普通的不帶參的查詢SQL;支持批量更新,批量刪除;

    b. PreparedStatement:

   可變參數的SQL,編譯一次,執行多次,效率高;

   安全性好,有效防止Sql注入等問題;

   支持批量更新,批量刪除;

    c. CallableStatement:

   繼承自PreparedStatement,支持帶參數的SQL操作;

   支持調用存儲過程,提供了對輸出和輸入/輸出參數(INOUT)的支持;

        Statement每次執行sql語句,數據庫都要執行sql語句的編譯 ,最好用於僅執行一次查詢並返回結果的情形時,效率高於PreparedStatement。

PreparedStatement的好處:

       PreparedStatement是預編譯的,使用PreparedStatement有幾個好處。

       1. 在執行可變參數的一條SQL時,PreparedStatement比Statement的效率高,因爲DBMS預編譯一條SQL當然會比多次編譯一條SQL的效率要高。

       2. 安全性好,有效防止Sql注入等問題。

       3. 對於多次重複執行的語句,使用PreparedStament效率會更高一點,並且在這種情況下也比較適合使用batch;

       4. 代碼的可讀性和可維護性。

 

注:

       executeQuery:執行給定的SQL 語句,該語句返回單個 ResultSet 對象。這個方法被用來執行 SELECT 語句,它幾乎是使用最多的 SQL 語句。

       executeUpdate: 用於執行INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數,指示受影響的行數(即更新計數)。對於CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總爲零。返回值爲-1代表更新不成功。

       execute: 用於執行返回多個結果集、多個更新計數或二者組合的語句。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章