据我了解, Statement对象不能用于开发企业应用程序,因为它在一个好的应用程序中存在各种问题。为什么在较新的版本中还没有弃用它?
4 回答
Statement
是一个完美的界面。不好的是通过将字符串连接在一起来创建查询,尤其是包含用户输入的字符串。如果您只发出不包含变量的常量查询,那么简单的Statement
界面就可以很好地发挥作用。
陈述
用于对数据库的通用访问。在运行时使用静态 SQL 语句时很有用。Statement 接口不能接受参数。
在 JDBC 中使用 Statement 应该 100% 本地化为用于 DDL(ALTER、CREATE、GRANT 等),因为这些是唯一不能接受 BIND VARIABLES 的语句类型。
准备好的语句
当您计划多次使用 SQL 语句时使用。PreparedStatement 接口在运行时接受输入参数。
PreparedStatements 或 CallableStatements 应该用于所有其他类型的语句(DML、查询)。因为这些是接受绑定变量的语句类型。
JDBC 驱动程序可以区别对待 SQL 语句。具体来说,在 Oracle 中,PreparedStatement 想要绑定它看到的任何看起来像 :NAME 的东西。
这对于使用 :NEW 和 :OLD 名称来表示新行和旧行的 Oracle 触发器来说是有问题的。
因此,当您尝试使用 PreparedStatement 创建 Oracle 触发器时,它将失败,因为没有任何内容绑定到 :NEW / :OLD 的引用。
您必须改用普通的 Statement.execute() 调用来执行此操作。
PreparedStatement 也比 Statement 更安全。
使用 Statement 时要小心,并从用户那里获取输入并将其直接传递给查询。
用户可以使用 SQL Injection 入侵您的系统。