最开始 我在程序里使用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!



版权所有 罗明

Feedback

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句?  回复  更多评论   

2006-11-12 10:34 by GoKu
用参数传递的方式更安全,代码也更易读懂,速度也稍有提升

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2007-08-26 21:44 by 罗明
还有一个原因,可能就是楼上说的安全吧^_^,今天刚发现的-_-!

******************************************
评论人:liusoft 发表时间: Wed Dec 03 09:22:35 CST 2003
千万不要把参数值写在SQL语句中

如果你用 insert into table1 values(?,?,?);

然后调用PreparedStatement.setFloat(3,234234235.234);

就不会使得234234235.234变成2.34234235234E8字符串了
*******************************************
原评论见:http://www.javaresearch.org/article/10854.htm

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:31 by 传世私服
1936

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:32 by 传奇世界私服
1377

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:32 by 魔兽世界私服
1497

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:32 by 魔兽世界私服
6294

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽世界私服
0183

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽世界私服
2809

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽世界私服
9272

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽世界私服
6601

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽世界私服
1074

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:33 by 魔兽私服
6279

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
1367

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
3520

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
9155

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
7091

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
5462

# re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句  回复  更多评论   

2008-05-31 22:34 by 魔兽私服
0216



标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-11-13 22:47 编辑过