一.數據庫預編譯起源:
數據庫接受sql語句,需要解析和制定執行,中間需要花費一段時間.
有時候同一語句可能會多次執行, 那么就會造成資源的浪費
如何減少編譯執行的時間 ? 就有了預編譯,預編譯是將這類語句提前用占位符替代,一次編譯,多次執行.
預編譯后的執行代碼會被緩存下來,下次調用就不需要編譯了,省去解析優化
如何實現 ? 通過PreparedStatement和占位符來實現的。
二.預編譯的作用
1.優化sql語句的執行,提升性能
2.防止sql注入: 使用預編譯,其后注入的參數將不會再用sql編譯. 那么后面注入來的參數,系統將不再認為他是sql語句,而是默認他是一個參數,參數中的 or\and 等 都不再是sql語法的保留字
三.預編譯如何開啟
當前的最新版本基本都支持
配置jdbc鏈接時強制開啟預編譯和緩存:useServerPrepStmts和cachePrepStmts參數 :
代碼 : conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/prepare_stmt_test?user=root&password=root&useServerPrepStmts=true&cachePrepStmts=true");
參考:https://www.jianshu.com/p/9972d7b33061