回覆列表
  • 1 # akaau9613

    1、 PreparedStatement介面繼承Statement, PreparedStatement 例項包含已編譯的 SQL 語句,所以其執行速度要快於 Statement 物件。2、作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要引數3、在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement.基於以下的原因:一.程式碼的可讀性和可維護性.雖然用PreparedStatement來代替Statement會使程式碼多出幾行,但這樣的程式碼無論從可讀性還是可維護性上來說.都比直接用Statement的程式碼高很多檔次:stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values (""+var1+"",""+var2+"","+var3+",""+var4+"")");//stmt是Statement物件例項perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");perstmt.setString(1,var1);perstmt.setString(2,var2);perstmt.setString(3,var3);perstmt.setString(4,var4);perstmt.executeUpdate(); //prestmt是 PreparedStatement 物件例項 不用我多說,對於第一種方法.別說其他人去讀你的程式碼,就是你自己過一段時間再去讀,都會覺得傷心.二.PreparedStatement盡最大可能提高效能.語句在被DB的編譯器編譯後的執行程式碼被快取下來,那麼下次呼叫時只要是相同的預編譯語句就不需要編譯,只要將引數直接傳入編譯過的語句執行程式碼中(相當於一個涵數)就會得到執行.這並不是說只有一個Connection中多次執行的預編譯語句被快取,而是對於整個DB中,只要預編譯的語句語法和快取中匹配.那麼在任何時候就可以不需要再次編譯而可以直接執行.而statement的語句中,即使是相同一操作,而由於每次操作的資料不同所以使整個語句相匹配的機會極小,幾乎不太可能匹配.比如:insert into tb_name (col1,col2) values ("11","22");insert into tb_name (col1,col2) values ("11","23");即使是相同操作但因為資料內容不一樣,所以整個個語句本身不能匹配,沒有快取語句的意義.事實是沒有資料庫會對普通語句編譯後的執行程式碼快取.當然並不是所以預編譯語句都一定會被快取,資料庫本身會用一種策略,比如使用頻度等因素來決定什麼時候不再快取已有的預編譯結果.以儲存有更多的空間儲存新的預編譯語句.

  • 2 # 使用者674626316078

    PreparedStatement預編譯,就是先編譯好了的SQL語句,只要給其中的引數賦值就可以直接使用,而後者Statement不是預編譯的,執行的時候也需要完整寫出SQL語句,這只是簡單說一下,CSDN上有詳細的

  • 中秋節和大豐收的關聯?
  • 吹風機吹口罩能防毒嗎?