与Statement相比,使用Preparedstatement有哪些缺点?

7
我在研究JDBC中Statement和PreparedStatement的区别时,发现PreparedStatement相比Statement有很多优点,可以在这里这里看到。
我的一些同事问为什么我们还需要Statement,为什么它没有被弃用,因为PreparedStatement有这么多优点。
那么,为什么JDBC API仍然保留Statement呢?

3
需要执行一次的无参数查询。 - Iłya Bursov
3
PreparedStatementStatement接口的一个实现。你的问题不清楚... - Nir Alfasi
1
我总是更喜欢使用预处理语句,因为它比普通语句有以下优点: 1)PreparedStatement 可以自动转义特殊字符,帮助我们防止 SQL 注入攻击。 2)PreparedStatement 允许我们执行带参数输入的动态查询。 3)PreparedStatement 提供了不同类型的 setter 方法来设置查询的输入参数。 4)PreparedStatement 比 Statement 更快。 5)PreparedStatement 帮助我们编写具有 setter 方法的面向对象代码。 6)PreparedStatement 返回 FORWARD_ONLY ResultSet。 - Ravindra babu
如果您想在没有变量的情况下运行查询,并且只运行一次,那么语句可能很有用,但这种优势可能仅持续几毫秒。我看到语句的唯一优点是动态SQL的执行。有关动态SQL的详细信息,请查看http://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg09dyn.htm。 - Ravindra babu
@alfasin,是的,但我的问题是,如果PreparedStatement比Statement有很多优点,那么为什么我们仍然有Statement接口?它应该被视为已弃用。 - learner
显示剩余3条评论
2个回答

2

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


0
那么,我们在JDBC API中仍然保留Statement是否有任何原因?
是的,因为它在SQL客户端-服务器API中。如果要删除非预处理语句,则JDBC中的SQL功能将丢失。
正如其他答案所提到的,如果没有动态参数,PreparedStatement就没有任何优势。对于这些情况,使用非预处理语句略微更简洁。
与这些问题完全无关的事实是,PreparedStatement是Statement的子接口,因此后者不能被删除而不重新设计API。这更多地与Java API有关,而不是与SQL有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接