预编译JDBC PreparedStatement有什么作用?

“预编译”语句的作用是什么,因为我已经看到,如果我编写一个带有错误SQL语法的预准备语句,那么编译不会报告任何问题!

因此,如果预编译准备好的语句不检查语法有效性,它究竟做了什么?

创建PreparedStatements可能会也可能不会涉及SQL语法validation甚至DB服务器往返,这完全取决于所使用的JDBC驱动程序。 有些司机会进行往返或validation,有些则不会。

因此,在一些JDBC驱动程序上, PreparedStatement不再比普通Statement更“准备”。 (换句话说:对于一些JDBC驱动程序, PreparedStatement表示服务器端资源(类似于Connection ),而在其他JDBC驱动程序上,它是纯客户端构造)。

但是,一个重要的区别是PreparedStatement将帮助您以一种方式处理动态参数值,这种方式可以避免在尝试手动将值插入SQL语句字符串并使用它执行时遇到的任何转义或格式问题。正常的Statement

该function不能预先选择“准备”语句,因此它是由每个JDBC驱动程序提供的,即使它没有执行任何其他准备步骤。

‘语句编译’是在数据库上发生的事情,它可以帮助它更快,更有效地返回结果。 如果您使用PreparedStatement,那么它允许数据库重用已经编译的语句并保存必须再次执行的操作。 错误的SQL可能会导致编译错误的数据库语句,但并非总是如此。