何时使用语句而不是预处理语句。我认为语句用于没有参数的查询,但为什么不使用预处理语句?对于没有参数的查询,哪个更快。
我认为Statement常用于没有参数的查询,但是为什么不能使用PreparedStatements呢?
这种说法并不准确。PreparedStatements适用于INSERT、UPDATE和DELETE语句,这些语句返回ResultSet或更新计数。正如Joachim所指出的那样,它们在DDL语句和调用存储过程时也不起作用(这不是两个类之间的区别)。至于没有绑定参数的查询,PreparedStatements可能比Statements更好(见下文)。
对于没有参数的查询,哪一个更快?
长期而言,对于单个连接的扩展使用,PreparedStatements会更快。虽然PreparedStatements必须编译,这需要一些时间(实际上并不多,所以不要将其视为缺点),但编译版本基本上保存了对数据库中SQL执行计划的引用。一旦编译完成,PreparedStatement将存储在特定于连接的缓存中,以便可以重复使用编译版本以提高性能。如果您正在使用JDBC批处理操作,则使用PreparedStatements会使批处理的执行比使用纯Statement对象更快,因为如果数据库需要这样做,则计划可能需要一次又一次地准备。
这取决于您的需求。
如果您有一个在循环或经常使用不同参数运行的SQL语句,则PreparedStatement是最佳选择,因为它会被预编译并缓存此参数化SQL查询的执行计划。每次从相同的PreparedStatement对象运行时,它将使用缓存的执行计划并提供更好的性能。
此外,可以使用PreparedStatement避免SQL注入。
但是,如果您确定只运行一次SQL查询,则有时Statement将是最佳选择,因为当您创建PreparedStatement对象时,有时会进行额外的数据库调用,如果驱动程序支持预编译,则方法Connection.prepareStatement(java.lang.String)将发送语句到数据库进行预编译。
阅读下面的文章以了解“Statement与PreparedStatement”