一.数据库预编译起源:
数据库接受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