java - 在方法之间重用 PreparedStatement?

标签 java performance architecture jdbc prepared-statement

我们都know that我们应该重用 JDBC PreparedStatement 而不是在循环中创建新实例。

但是如何处理不同方法调用之间的PreparedStatement重用呢? 重用“规则”是否仍然有效?

我真的应该考虑为 PreparedStatement 使用一个字段,还是应该在每次调用时关闭并重新创建准备好的语句(将其保存在本地)? (当然,此类的实例将绑定(bind)到 Connection,这在某些体系结构中可能是一个缺点)

我知道理想的答案可能是“视情况而定”。
但我正在为经验不足的开发人员寻找最佳实践,以便他们在大多数情况下都能做出正确的选择。

最佳答案

Of course an instance of such a class would be bound to a Connection which might be a disadvantage

可能是?这将是一个巨大的劣势。您要么需要同步对它的访问,这会扼杀您的多用户性能,要么创建多个实例并将它们保存在一个池中。屁股很痛。

语句池是 JDBC 驱动程序的工作,即使不是全部,大多数当前的驱动程序也会为您完成这项工作。当您调用 prepareStatementprepareCall 时,驱动程序将处理现有资源和预编译语句的重用。

声明 对象绑定(bind)到一个连接,应该尽快使用连接并将其返回到池中。

简而言之,标准做法是在方法开始时获取一个PreparedStatement,在循环中重复使用它,然后在方法结束时关闭它, 最佳实践。

关于java - 在方法之间重用 PreparedStatement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4647476/

相关文章:

java - 如何在 File 类中提供相对路径来上传任何文件?

mysql - 在 MySQL 中按日期时间范围选择非常慢

C++ 为有限数量设置的所有变体编译代码

java - 如何将二维数组中满足特定条件的一些元素转换为java中的列表?

java - 使用 RGB 值比较两个图像。 ( java )

android - Android 垃圾收集器是否在运行时暂停其他应用程序?

java - jvm 如何处理在循环内创建对象

macos - 程序如何同时支持i386和ppc?

java - 如何在 Java Web 应用程序之间共享通用组件?

java - 无法使用谷歌地图构建应用程序