存在即是合理的
Statement 比 PreparedStatement 的好处在什么地方?

解决方案 »

  1.   

    PreparedStatement是预先编译的,而Statement则不是预先编译的,
    PrepareStatement中执行的SQL语句中是可以带参数的,而Statement则不可以
    eg:ps=conn.preparedStatement("select * from tb where name=? and password=?");
      

  2.   

    建议使用PreparedStatement。
    至于好处嘛你学了ORACLE就能了解更透彻些。
      

  3.   

    我在补充下2楼的
    如果用statement 那么如果你的sql语句有错误可以通过调试看到完整的sql语句,放到数据库的命令行里就运行下就知道对不对了
    这点在sql语句很长的时候很管用,但是用PrepareStatement却看不到完整的命令行,也就无法知道sql哪里错了。
    如果没有强行要求一般都用statement如果你见到100来行的sql语句你会庆幸statement真是太好了
      

  4.   

    LS的实在错得离谱了
    不管在什么情况下,都优先使用preparedStatement
    当然,最好的,还是CallableStatement
    这是性能的问题
    在Web开发中,面对的是很多用户的访问
    最好不要用普通的语句对象
      

  5.   

    PreparedStatement是预编译的,可以防止sql注入,
    大批量操作的话,执行效率会高点(理论上如此)
      

  6.   

    还是推荐PreparedStatement
    PreparedStatement预编译sql,可以在未知的地方以?的形式给出参数,然后在下面以set的形式设置参数,类似c#中的{}占位符..  
    大批量操作的时候执行效率会高点.. 但是PreparedStatement的话你是无法看到sql的完整句的. 所以有的时候也给调试带来一些麻烦..    当你不需要参数的时候可以使用Statement,
      

  7.   

    PreparedStatement 是预先编译的SQL, 就如7楼所说的,大批量操作的话, 执行效率会高点.
      

  8.   

    在批处理的时候PreparedStatement效率高:
    因为
    PreparedStatement是预先编译的,一次编译多次执行,而Statement则不是预先编译的,每次请求都得编译。 
    PrepareStatement中执行的SQL语句中是可以带参数的,有占位符的,而Statement则不可以。但是非批处理的情况下,是使用Statement。Statement接口更丰富些。
      

  9.   

    在批处理的时候PreparedStatement效率高: 
    因为 
    PreparedStatement是预先编译的,一次编译多次执行,而Statement则不是预先编译的,每次请求都得编译。 
    PrepareStatement中执行的SQL语句中是可以带参数的,有占位符的,而Statement则不可以。 但是非批处理的情况下,是使用Statement。Statement接口更丰富些。
      

  10.   

    这两者都有各自的适应范围,
    具体的使用方法也不相同!
    要看使用者怎么去使用,
    一般建议用PreparedStatement,
    个人建议
      

  11.   

    1,执行效率:Statement 采取直接编译 SQL 语句的方式,扔给数据库去执行,而 PreparedStatement 则先将 SQL 语句预编译
       一遍,再填充参数,这样效率会高一些。JDK 文档说:SQL 语句被预编译并且存储在 PreparedStatement 对象中,其后可以
       使用该对象高效地多次执行该语句。2,代码可读性:Statement 中 SQL 语句中需要 Java 中的变量,加就得进行字符串的运算,还需要考虑一些引号、单引号的问
       题,参数变量越多,代码就越难看,而且会被单引号、双引号搞疯掉;而 PreparedStatement,则不需要这样,参数可以采
       用“?”占位符代替,接下来再进行参数的填充,这样利于代码的可读性,并且符合面向对象的思想。3,安全性:Statement 由于可能需要采取字符串与变量的拼接,很容易进行 SQL 注入攻击,而 PreparedStatement 由于是预
       编译,再填充参数的,不存在 SQL 注入问题。
      

  12.   

    ··················
    我问的是 Statement 比 PreparedStatement 的好处在什么地方?而不是 PreparedStatement 的好处啊
      

  13.   


    Statement 没有好处,PreparedStatement 是 Statement 的子类,Statement 拥有的好处 PreparedStatement 都拥有。
      

  14.   


    当你的sql是变化的,或者不确定的情况下,就尽量不要用PreparedStatement,用了也达不到预期的效果,因为你的sql是不断变化的,反而增加了数据库的负担。例如:select * from table_1 where aa='b' and ddd='c';执行完后,另一个人调用其方法执行另一条sql:select * from table_2 where ccc='bbb';
    这样同一个方法中每次执行的sql都不一样的时候,就尽量用Statement,执行一次就可以了,不需要把sql预编译缓存到数据库中。如果你每执行一次预编译后缓存到数据库中,那么sql不同,有可能每次都是变的,反而增加了数据库的负担。
    PreparedStatement 的预编译是为了提高效率,先把sql在数据库中编译或翻译好,然后每次执行的时候就直接利用。这样的用法最好在sql不经常改变的情况下使用。例如:insert 语句。
      

  15.   

    我不同意楼上的观点:至少从安全性上面来看就应该放弃 Statement,使用 PreparedStatement,我认为相对于 PreparedStatement 来说,Statement 没有一点点的优势。至于 SQL 数据缓存的问题,就算使用了 Statement 执行 SQL 语句,数据库照样会记住这些 SQL 语句。至于数据库管理系统是如何进行操作,或者采用什么缓存策略就不是很清楚了。