问题描述
“预编译”语句的作用是什么,因为我已经看到,如果我编写一个带有错误SQL语法的预准备语句,编译不会报告任何问题!
因此,如果预编译准备好的语句不检查语法有效性,它究竟做了什么?
1楼
创建PreparedStatements
可能涉及也可能不涉及SQL语法验证甚至DB服务器往返,这完全取决于所使用的JDBC驱动程序。
有些司机会进行往返或验证,有些则不会。
因此,在一些JDBC驱动程序上, PreparedStatement
不再比普通Statement
更“准备”。
(换句话说:对于一些JDBC驱动程序, PreparedStatement
表示服务器端资源(类似于Connection
),而在其他JDBC驱动程序上,它是纯客户端构造)。
但是,一个重要的区别是PreparedStatement
将帮助您以一种方式处理动态参数值,这种方式可以避免在尝试将值手动插入SQL语句字符串并使用它执行时遇到的任何转义或格式问题。正常的Statement
。
这个功能是从“准备”语句的选择事前或不indepdendent,所以它是由每一个JDBC驱动程序提供的,即使它没有做任何其他的准备步骤。
2楼
'语句编译'是在数据库上发生的事情,它有助于它更快,更有效地返回结果。 如果您使用PreparedStatement,那么它允许数据库重用已经编译的语句并保存必须再次执行的操作。 错误的SQL可能会导致编译错误的数据库语句,但并非总是如此。