【问题标题】:Difference between Statement And PreparedStatement acc to given condition根据给定条件,Statement 和 PreparedStatement 之间的区别
【发布时间】:2014-08-31 14:56:44
【问题描述】:

大多数关系数据库通过四个步骤处理 JDBC/SQL 查询:

  1. 解析传入的 SQL 查询
  2. 编译 SQL 查询
  3. 规划/优化数据采集路径
  4. 执行优化查询/获取并返回数据

有人可以在以下代码中向我解释这些步骤

Statement st=con.createStatement();
ResultSet rset=st.executeQuerry("Select * from tab");

PrepareStatement stm=con.preparedStatement("select * from tab");
ResulSet rset=stm.executeQuerry();

这些与上述有什么不同?

【问题讨论】:

  • “acc”是什么意思?

标签: java jdbc


【解决方案1】:

Prepared Statement 查询是在数据库上预编译的,并且访问计划将被重用于执行进一步的查询,这使它们能够比Statement 对象生成的普通查询更快地执行。

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

【讨论】:

    【解决方案2】:

    在多次调用方面差异将是可见的,因为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)

    【讨论】:

      【解决方案3】:

      PrepareStatement是预编译的,因此它会更快。当您在 select 语句中具有 where 条件时,就会出现显着差异,Statement sql 查询受 SQL 注入影响,而使用PrepareStatement 则不受 SQL 注入影响。

      当您有 INSERTUPDATEDELETE 等 DML 语句时,同样适用。

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

      【讨论】:

        猜你喜欢
        • 2011-03-17
        • 1970-01-01
        • 2016-04-16
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多