罗明的博客
... ...
讨论Eclipse, Java, Linux, Google产品
              

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



版权所有 罗明
posted on 2006-11-01 20:18 罗明 阅读(1575) 评论(19)  编辑  收藏 所属分类: JavaProgramTechStudyDatabase
Comments
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句?
    GoKu
    Posted @ 2006-11-12 10:34
    用参数传递的方式更安全,代码也更易读懂,速度也稍有提升  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    罗明
    Posted @ 2007-08-26 21:44
    还有一个原因,可能就是楼上说的安全吧^_^,今天刚发现的-_-!

    ******************************************
    评论人: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语句
    传世私服
    Posted @ 2008-05-31 22:31
    1936  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    传奇世界私服
    Posted @ 2008-05-31 22:32
    1377  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:32
    1497  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:32
    6294  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:33
    0183  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:33
    2809  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:33
    9272  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:33
    6601  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽世界私服
    Posted @ 2008-05-31 22:33
    1074  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:33
    6279  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    1367  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    3520  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    9155  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    7091  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    5462  回复  更多评论   
  • # re: 为什么用PreparedStatement而不是直接用"+"连接SQL语句
    魔兽私服
    Posted @ 2008-05-31 22:34
    0216  回复  更多评论   
  • # Unikal'Nyi Kontent
    Unikal'Nyi Kontent
    Posted @ 2009-05-18 03:38
    Hi everyone. We require from buildings two kinds of goodness: first, the doing their practical duty well: then that they be graceful and pleasing in doing it.
    I am from Norway and also am speaking English, tell me right I wrote the following sentence: "So often when people encounter seo and want to start optimizing their sites they different consultants define seo differently.We offer affordable seo, ppc, search engine optimization, pay per click."

    :-) Thanks in advance. Helki.  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: