4

据我了解, Statement对象不能用于开发企业应用程序,因为它在一个好的应用程序中存在各种问题。为什么在较新的版本中还没有弃用它?

4

4 回答 4

3

Statement是一个完美的界面。不好的是通过将字符串连接在一起来创建查询,尤其是包含用户输入的字符串。如果您只发出不包含变量的常量查询,那么简单的Statement界面就可以很好地发挥作用。

于 2013-09-25T18:00:21.197 回答
2

陈述

用于对数据库的通用访问。在运行时使用静态 SQL 语句时很有用。Statement 接口不能接受参数。

在 JDBC 中使用 Statement 应该 100% 本地化为用于 DDL(ALTER、CREATE、GRANT 等),因为这些是唯一不能接受 BIND VARIABLES 的语句类型。

准备好的语句

当您计划多次使用 SQL 语句时使用。PreparedStatement 接口在运行时接受输入参数。

PreparedStatements 或 CallableStatements 应该用于所有其他类型的语句(DML、查询)。因为这些是接受绑定变量的语句类型。

于 2013-09-25T18:23:09.293 回答
1

JDBC 驱动程序可以区别对待 SQL 语句。具体来说,在 Oracle 中,PreparedStatement 想要绑定它看到的任何看起来像 :NAME 的东西。

这对于使用 :NEW 和 :OLD 名称来表示新行和旧行的 Oracle 触发器来说是有问题的。

因此,当您尝试使用 PreparedStatement 创建 Oracle 触发器时,它将失败,因为没有任何内容绑定到 :NEW / :OLD 的引用。

您必须改用普通的 Statement.execute() 调用来执行此操作。

于 2013-09-25T18:41:05.260 回答
1

PreparedStatement 也比 Statement 更安全。

使用 Statement 时要小心,并从用户那里获取输入并将其直接传递给查询。

用户可以使用 SQL Injection 入侵您的系统。

于 2013-09-25T18:47:49.983 回答