【问题标题】:Are there any disadvantages using Preparedstatement compared to Statement与 Statement 相比,使用 PreparedStatement 有什么缺点吗
【发布时间】:2015-10-24 11:08:51
【问题描述】:

我正在研究 JDBC 中 Statement 和 PreparedStatement 之间的差异,并发现与 Statement 相比,PreparedStatement herehere 有很多优势。

我的一些同事问为什么我们仍然需要 Statement 以及为什么它没有被弃用,看看 PreparedStatement 的优势。

那么我们还有什么理由让我们在 JDBC API 中还有 Statement 呢?

【问题讨论】:

  • 不带参数的查询应该被执行
  • PreparedStatementStatement 接口的实现。你的问题不清楚...
  • 我总是更喜欢使用准备好的语句,因为它比语句具有以下优势。 1)PreparedStatement 帮助我们防止 SQL 注入攻击,因为它会自动转义特殊字符。 2)PreparedStatement 允许我们使用参数输入执行动态查询。 3)PreparedStatement 提供了不同类型的setter 方法来设置查询的输入参数。 4)PreparedStatement 比Statement 快。 5)PreparedStatement 帮助我们使用 setter 方法编写面向对象的代码 6)PreparedStatement 返回 FORWARD_ONLY ResultSet,
  • 如果你想在没有变量的情况下运行查询并只运行一次,语句可能很有用,但这种优势可能只持续几毫秒。我看到语句的唯一优点是执行动态 SQL。在docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg09dyn.htm查找有关动态sql的详细信息
  • @alfasin,是的,但我的问题是 PreparedStatement 是否比 Statement 有这么多优势,那么为什么我们仍然有 Statement 接口?它应该被视为已弃用。

标签: java jdbc prepared-statement


【解决方案1】:

PreparedStatement用于处理动态SQL查询,Statement用于处理静态SQL查询。

【讨论】:

    【解决方案2】:

    那么还有什么理由让我们在 JDBC API 中还有 Statement 吗?

    是的,因为它位于 SQL 客户端-服务器 API 中。如果要删除未准备好的语句,那么 JDBC 中就会缺少 SQL 的一个特性。

    正如在其他答案中提到的,如果没有动态参数,PreparedStatement 就没有任何优势。对于这些情况,使用非准备语句会稍微简洁一些。

    与这些问题完全无关的是 PreparedStatement 是 Statement 的子接口,因此如果不重新设计 API,就无法删除后者。这更多地与 Java API 相关,而与 SQL 无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多