最开始 我在程序里使用SQL访问数据库时,都是直接用“+”将字段值嵌到SQL中。
String sql
=
"
select s.name from student s where s.id='
"
+
sId
+
"
'
";
后来我开始使用PreparedStatement,在SQL里使用“?”标记参数,然后用setXXX方法给参数赋值。当时只知道这样用是因为有setDate,setTimeStamp这些用“+”连接不能直接嵌入的值。
感觉PreparedStatement在性能方面应该也能快点,可能DBMS会重用,但不明底层原理。
这次《数据库实现》课程终于让我弄懂了:每个SQL语句都要通过 语法分析 -> 生成逻辑查询计划 -> 逻辑优化 -> 物理优化 等步骤生成具体的执行计划,用PreparedStatement就可以生成一个执行计划,以后只是参数改变(相当于执行计划的执行环境改变),前面的四个步骤也会省略,从而提高了效率。
如果一个SQL语句要被反复多次执行,或多用户同时操作,则应选用PreparedStatement!
版权所有 罗明