Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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_Database_Jdbc - Fatal编程技术网

Java 什么时候使用语句而不是准备好的语句?

Java 什么时候使用语句而不是准备好的语句?,java,database,jdbc,Java,Database,Jdbc,何时使用语句而不是准备语句。我假设语句用于没有参数的查询,但为什么不使用prepared语句呢?对于没有参数的查询,哪一个更快 我假设语句用于没有参数的查询,但为什么不使用prepared语句呢 这还不够。PreparedStatements用于返回结果集或更新计数的INSERT、UPDATE和DELETE语句。它们不适用于Joachim指出的DDL语句,也不适用于调用应该使用CallableStatement的存储过程(这两个类之间没有区别)。就没有绑定参数的查询而言,PreparedStat

何时使用语句而不是准备语句。我假设语句用于没有参数的查询,但为什么不使用prepared语句呢?对于没有参数的查询,哪一个更快

我假设语句用于没有参数的查询,但为什么不使用prepared语句呢

这还不够。PreparedStatements用于返回结果集或更新计数的INSERT、UPDATE和DELETE语句。它们不适用于Joachim指出的DDL语句,也不适用于调用应该使用CallableStatement的存储过程(这两个类之间没有区别)。就没有绑定参数的查询而言,PreparedStatements可能比Statements更好(见下文)

对于没有参数的查询,哪一个更快


从长远来看,PreparedStatements的速度会更快,超过了在单个连接中的扩展使用。这是因为,尽管必须编译PreparedStatements,这需要一些时间(这实际上并不多,所以不要将其视为缺点),但编译后的版本实际上在数据库中保留了对SQL执行计划的引用。编译后,PreparedStatement存储在特定于连接的缓存中,因此可以重用编译后的版本以获得性能增益。如果您使用的是JDBC批处理操作,那么使用PreparedStatements将使批处理的执行速度比使用普通语句对象快得多,如果数据库必须这样做,则可能需要一次又一次地准备计划。

这取决于您的需求

如果SQL语句在循环中运行或经常使用不同的参数运行,则PreparedStatement是最佳候选语句,因为它正在预编译并缓存此参数化SQL查询的执行计划。每次从同一PreparedStatement对象运行时,它都将使用缓存的执行计划,并提供更好的性能

使用PreparedStatement也可以避免SQL注入

但如果您确定只运行一次SQL查询,则有时语句将是最佳候选语句,因为当您创建PreparedStatement对象时,有时它会进行额外的db调用,如果驱动程序支持预编译,则该方法会将该语句发送到数据库进行预编译

阅读下面的文章,了解“声明与准备声明”


除了DDL语句和其他无参数语句外,几乎没有理由使用普通语句。可能重复仅供参考,典型查询的大部分工作是在语句的解析中,而不是在数据检索中。如果多次使用同一条语句,PreparedStatements会快得多。是的,这是在一次execute、executeUpdate或executeQuery调用中比较解析和执行的时候。对于大量使用的DB,如果您有足够大的语句缓存,则预编译语句本质上是跨多个调用获得性能增益的原因。