java - 多次使用 `java.sql.CallableStatement` 不关闭

标签 java mysql jdbc

我有一个 java.sql.CallableStatement有 3 个参数,我需要多次调用它,为第三个参数传递不同的值。

正确的做法是什么?我每次都可以创建一个新的可调用语句,但据我所知它将访问数据库。

当前代码通过更改第三个参数调用相同的语句实例,但没有关闭它,似乎可以正常工作。跳过关闭可调用语句是否正常?

它在 MySQL jdbc 连接上运行。

代码片段:

CallableStatement pivot = connection.prepareCall("{CALL pivot(?, ?, ?)]");
pivot.setString(1, "a");
pivot.setString(2, "b");
while(someCondition) {
  pivot.setString(3, "c");
  ResultSet res = pivot.executeQuery();
  try {
    // ...
  } finally {
    res.close();
  }
}

最佳答案

通过这种方式,您现在可以节省处理调用的一些步骤。 你看,每次准备调用 new 时,它都必须通过优化器继续进行 db,这会花费时间和资源。设置好 preparedCall 后,将其保持打开状态(并在 dbserver 上进行缓存)以获得更好的性能。

你在代码中错过了这个:

if(pivot == null)
    pivot = connection.prepareCall("{CALL pivot(?, ?, ?)]"); 

你应该将 pivot 保留为字段而不是变量。

注意:如果你需要资源并且你有很多准备好的语句和调用,你应该关闭那些不经常调用的大的。

我在微软找到了这个:diagram how it works来自 here .我找不到更好的照片了。

关于java - 多次使用 `java.sql.CallableStatement` 不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012798/

相关文章:

php - 在插入数据库之前使用 mysql_real_escape_string() 转义值,但存储值未转义

mysql - 合并数百万数据库中的多行

mysql - groovy中连接mysql时找不到合适的驱动

java - 准备好的语句出现 JDBC 错误,给出 SQL 异常。为什么?

java - 跨 Java 包 Autowiring Spring Beans

java - 如何在已安装的 Eclipse 中包含 JAVA 开发工具?

java - 如何使用 spring 'ResourcePatternResolver' 从指定路径读取所有文件

java.sql.SQLException : Io exception: The Network Adapter could not establish the connection

php - 如何在页面刷新时保留归档数据

java - Servlet.service() for servlet [...] 在路径 [/...] 的上下文中抛出异常 [Servlet 执行抛出异常] 具有根本原因