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