如果“准备好”的声明优越,为什么需要“声明”对象?

时间:2013-09-25 17:44:22

标签: java sql jdbc

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

4 个答案:

答案 0 :(得分:3)

Statement是一个非常精细的界面。通过将字符串连接在一起来创建查询有什么不好,特别是包含用户输入的字符串。如果您只发出不包含变量的常量查询,那么简单的Statement接口就能很好地运行。

答案 1 :(得分:2)

<强>声明

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

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

<强>的PreparedStatement

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

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

答案 2 :(得分:1)

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

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

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

您必须使用正常的Statement.execute()调用来执行此操作。

答案 3 :(得分:1)

PreparedStatement也比Statement更安全。

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

用户可以使用SQL注入攻击您的系统。