日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Statement, PreparedStatement和CallableStatement的区别

發布時間:2025/3/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Statement, PreparedStatement和CallableStatement的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Statement用于執行不帶參數的簡單SQL語句,并返回它所生成的結果,每次執行SQL豫劇時,數據庫都要編譯該SQL語句。

Satatement stmt = conn.getStatement(); stmt.executeUpdate("insert into client values("aa","aaa")");

PreparedStatement表示預編譯的SQL語句的對象,用于執行帶參數的預編譯的SQL語句。

CallableStatement則提供了用來調用數據庫中存儲過程的接口,如果有輸出參數要注冊,說明是輸出參數。

雖然Statement對象與PreparedStatement對象能夠完成相同的功能,但是相比之下,PreparedStatement具有以下優點:

1.效率更高。

在使用PreparedStatement對象執行SQL命令時,命令會被數據庫進行編譯和解析,并放到命令緩沖區,然后,每當執行同一個PreparedStatement對象時,由于在緩存區中可以發現預編譯的命令,雖然它會被再解析一次,但是不會被再一次編譯,是可以重復使用的,能夠有效提高系統性能,因此,如果要執行插入,更新,刪除等操作,最好使用PreparedSatement。鑒于此,PreparedStatement適用于存在大量用戶的企業級應用軟件中。

2.代碼可讀性和可維護性更好。

下兩種方法分別使用Statement和PreparedStatement來執行SQL語句,顯然方法二具有更好的可讀性。

方法1:

stmt.executeUpdate("insert into t(col1,xol2) values('"+var2+"','"+var2+"')");

方法2:

perstmt = con.prepareStatement("insert into tb_name(col1,col2) values(?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2);

3.安全性更好。

使用PreparedStatement能夠預防SQL注入攻擊,所謂SQL注入,指的是通過把SQL命令插入到Web表單提交或者輸入域名或者頁面請求的查詢字符串,最終達到欺騙服務器,達到執行惡意SQL命令的目的。注入只對SQL語句的編譯過程有破壞作用,而執行階段只是把輸入串作為數據處理,不再需要對SQL語句進行解析,因此也就避免了類似select * from user where name='aa' and password='bb' or 1=1的sql注入問題的發生。

?

CallableStatement由prepareCall()方法所創建,它為所有的DBMS(Database Management System)提供了一種以標準形式調用已存儲過程的方法。它從PreparedStatement中繼承了用于處理輸入參數的方法,而且還增加了調用數據庫中的存儲過程和函數以及設置輸出類型參數的功能。

轉載于:https://www.cnblogs.com/LoganChen/p/6816713.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Statement, PreparedStatement和CallableStatement的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。