根据给定条件,Statement和PreparedStatement之间的区别

时间:2014-07-10 09:34:09

标签: java jdbc

大多数关系数据库分四步处理JDBC / SQL查询:

  1. 解析传入的SQL查询
  2. 编译SQL查询
  3. 规划/优化数据采集路径
  4. 执行优化查询/获取并返回数据
  5. 有人可以在下面的代码中解释我这些步骤

    Statement st=con.createStatement();
    ResultSet rset=st.executeQuerry("Select * from tab");
    
    PrepareStatement stm=con.preparedStatement("select * from tab");
    ResulSet rset=stm.executeQuerry();
    

    上面会有什么区别?

3 个答案:

答案 0 :(得分:0)

PrepareStatement是预编译的,因此会更快。如果你在select语句中有条件,Statement sql查询需要SQL注入,而使用PrepareStatement则可以安全地使用SQL注入。

当您拥有INSERTUPDATEDELETE等DML语句时也是如此。

您可以找到更多详情https://stackoverflow.com/a/13245124/599528

答案 1 :(得分:0)

Prepared Statement查询是在数据库上预编译的,并且将重用访问计划来执行进一步的查询,这使得它们比Statement对象生成的常规查询执行得快得多。

Prepared Statement还允许您编写动态和参数查询。使用参数查询和PreparedStatement可以防止多种形式的SQL注入,因为作为占位符一部分传递的所有参数都将自动转义JDBC驱动程序。

答案 2 :(得分:0)

差异在多次调用方面是可见的,因为PreparedStatements以预编译格式存储,如果驱动程序支持预编译,则con.preparedStatement("select * from tab");会将语句发送到数据库预编译。您可以在此处看到差异:

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#createStatement()

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String)