Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是";声明;如果;“准备好的”;声明是否优于?_Java_Sql_Jdbc - Fatal编程技术网

Java 为什么是";声明;如果;“准备好的”;声明是否优于?

Java 为什么是";声明;如果;“准备好的”;声明是否优于?,java,sql,jdbc,Java,Sql,Jdbc,据我所知,语句对象不能用于开发企业应用程序,因为它在一个好的应用程序中有各种各样的问题。为什么它在新版本中还没有被弃用?语句是一个完美的界面。糟糕的是通过将字符串连接在一起创建查询,特别是包含用户输入的字符串。如果您只发出不包含变量的常量查询,那么简单的语句接口就可以很好地工作。语句 用于对数据库的通用访问。在运行时使用静态SQL语句时非常有用。语句接口无法接受参数 JDBC中语句的使用应该100%本地化为用于DDL(ALTER, CREATE、GRANT等),因为它们是唯一不能接受BIND的语

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

语句
是一个完美的界面。糟糕的是通过将字符串连接在一起创建查询,特别是包含用户输入的字符串。如果您只发出不包含变量的常量查询,那么简单的
语句
接口就可以很好地工作。

语句

用于对数据库的通用访问。在运行时使用静态SQL语句时非常有用。语句接口无法接受参数

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

准备好的报表

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

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

JDBC驱动程序可以以不同的方式处理SQL语句。具体来说,在Oracle中,PreparedStatement希望绑定它看到的任何类似于名称的东西

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

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


您必须使用普通语句。execute()调用来执行此操作。

而且PreparedStatement比Statement更安全

在使用语句时要小心,从用户处获取输入并将其直接传递给查询


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

欢迎使用Stackoverflow!听起来你在谈论SQL语句。你指的是哪种编程语言和哪种数据库访问技术?我指的是Java语句,一种在JDBC连接中使用的预先准备好的语句。看看
语句
是一种接口,实际上它有点过度,就像公司风格的指南一样疯狂;为什么我们要使用
PreparedStatement
从用户中选择计数(*)“?开箱即用回答:)谢谢