什么是SQL绑定变量,如何实现绑定变量?
- - CSDN博客推荐文章Java实现绑定变量的方法:. 假设要将id从1到10000的员工的工资都更新为150.00元,不使用绑定变量,则:. 二者区别在于,不用绑定变量,则相当于反复解析、执行了1w个sql语句. 使用绑定变量,解析sql语句只用了一次,之后的9999次复用第一次生成的执行计划. 什么时候不应该/不必要使用绑定变量.
绑定变量是为了减少解析的,比如你有个语句这样 select aaa,bbb from ccc where ddd=eee; 如果经常通过改变eee这个谓词赋值来查询,像如下 select aaa,bbb from ccc where ddd=fff; select aaa,bbb from ccc where ddd=ggg; select aaa,bbb from ccc where ddd=hhh; 每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,无论ddd后面是什么值,都不需要重复解析
Java实现绑定变量的方法:
PreparedStatement pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?"); pstmt.setBigDecimal(1, 15.00); pstmt.setInt(2, 110592); //result statmement: UPDATE employees SET salay = 15.00 WHERE id = 110592 pstmt.executeQuery();
假设要将id从1到10000的员工的工资都更新为150.00元,不使用绑定变量,则:
使用绑定变量,则:sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 1"); sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 2"); sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 3"); sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 4"); .... sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 10000");
PreparedStatement pstmt; for (id = 1; id < 10000; id++) { if (null == pstmt) pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?"); pstmt.setBigDecimal(1, 150.00); pstmt.setInt(2, id); pstmt.executeQuery(); }二者区别在于,不用绑定变量,则相当于反复解析、执行了1w个sql语句。使用绑定变量,解析sql语句只用了一次,之后的9999次复用第一次生成的执行计划。显然,后者效率会更高一些。
2. 什么时候不应该/不必要使用绑定变量
3. 绑定变量在OceanBase中的实现