开发者学堂课程【JDBC 数据库开发入门:mysql 的预编译功能默认是关闭的】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/29/detail/636
mysql 的预编译功能默认是关闭的
内容介绍
一、执行的过程
二、MySQL 执行预编译
三、使用 Statement 执行预编译
四、useSenverPrepstmts 参数
五、cachePrepStmts 参数
六、打开批处理
一、通过查看 MySQL 日志可以看到执行的过程
二、MySQL 执行预编译
1. 执行预编译语句
例如:prepare myfun from 'select * from t. book where bid=?"
2. 设置变量
例如: set @str='b1"
3. 执行语句
例如: execute myfun using @str
如果需要再次执行 myfun,那么就不再需要第一步,即不需要再编译语句了:
1.设置变量,例如: set @str='b2'
2.执行语句,例如:execute myfun using @str
三、使用 Statement 执行预编译
connection con = gdbcutils:getConnection ( );
statement stmt =con.createStatement
stmt.exe.cuteUpdate ( "preparemyfun from 'aelect * from t_book where
bid=?' ");
stmt.executeUpdate("'set @str='b1' '');
四、useSenverPrepstmts 参数
默认使用 PreparedStatement. 是不能执行预编译的,这需要在url中给出useServerPrepStmts=true 参数( MysQL. Server 4.1 之前的版本是不支持预编译的,而 Connector/J在 5.0.5以后的版本,默认是没有开启预编译功能的。)
例如:
idbcamysql://localhost:3306/test?useserverPrepstmts=true
这样才能保证 mysql 驱动会先把 SQL语句发送给服务器进行预编译,然后在执行executeQuery() 时只是把参数发送给服务器。
五、cachePrepStmts 参数
当使用不同的 PreparedStatement 对象来执行相同的 SQL 语句时,还是会出现编译两次的现象,这是因为驱动没有缓存编译后的函数key,导致二次编译。
如果希望缓存编译后函数的 key,那么就要设置 cadheprepstmts 参数为 true。
例如:
ldbcmysq://localhost:3306/test?useserverPrepstmts=true&cachePrepStmts=true
六、打开批处理
MySQL 的批处理也需要通过参数来打开:
rewriteBatchedStatements=true