[英]PreparedStatement in JDBC
當我們創建PreparedStatement的對象並像這樣執行查詢時
PreparedStatement stmt=con.prepareStatement("select * from emp");
ResultSet rs=stmt.executeQuery();
如何重新編譯該語句並預編譯PreparedStatement?
當使用PreparedStatement對象從存儲內存位置數據的數據庫中獲取數據時?
它取決於JDBC引擎。 例如,用於MySQL的JDBC引擎通常實際上並不創建服務器端准備好的語句(請參閱MySQL文檔和此SO問題 )。 在這些情況下, PreparedStatement
接口僅在查詢和參數之間提供分隔,以保持清晰度並防止注入攻擊。 每次執行PreparedStatement
,它將通過一個完整的SQL查詢發送,然后MySQL服務器將對其進行解析,優化和執行。 另一方面,某些系統(包括帶有正確選項的MySQL-看到第二個鏈接)將使用“真實的”准備好的語句,這意味着它將僅被解析和優化一次。
但是,實際上,這就像要求java.util.List
的內存特征一樣-這完全取決於實現,因此通常無法對接口進行有意義的回答。
在JDBC中,總是發生三件事:
1)Query creation.
2)Query compilation.
3)Query Execution.
在PreparedStatement的情況下,高速緩存會顯示在圖片中,因此無需再次執行前兩個步驟。 因此,在PreparedStatement與Statement相反的情況下,僅執行最后一步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.