【问题标题】:Java ResultSet close vs ResultSet set null [duplicate]Java ResultSet close vs ResultSet set null [重复]
【发布时间】:2016-05-18 02:22:45
【问题描述】:

在我们使用完结果集后,通常我会做以下事情:

if(rs != null)
    rs.close();   rs = null;

我想问的是,通过设置 resultset = null 如下:

if(rs != null)
    rs = null;

是否等于设置rs.close()?是否有可能仍然出现最大光标?

【问题讨论】:

  • 不!这是不一样的。你必须关闭它。我没有得到第二个问题。
  • @Rudy 不重复,我的问题是结果集 null 与结果集关闭之间的区别,您附加的链接是我们需要关闭它的原因。

标签: java


【解决方案1】:

是否等于设置rs.close()?是否有可能仍然出现最大光标?

没有。它们不一样,只是nulling 引用不会关闭数据库上的资源。事实上,当引用超出范围时,它就无法访问(因此nulled)。所以没有必要明确地null 引用。另外,请注意,如果没有大括号,您的 null 分配不会附加到 if。

if (rs != null) {
    rs.close();
}

【讨论】:

  • 对不起,我打算把 rs = null; 和 rs 放在同一行
  • 设置resultset为null会减少GC的工作量吗?我的意思是,我们可以释放一点内存,而不必等待引用超出范围
  • @hades 不。这相当于让变量超出范围。它使其符合 GC(不一定会调用 GC)。
  • @UDKOX 有many 方法可以解决answer 这个问题,但是担心垃圾收集器何时(或是否)运行是一个微优化(如果你write dumb code)。
  • @UDKOX 可以,但这并不意味着可以。如果临时资源很重并且我需要在同一范围内进行更多处理,我有时会取消它。但这通常是不必要的。
猜你喜欢
  • 2011-02-24
  • 2012-07-12
  • 1970-01-01
  • 2018-12-07
  • 2021-06-08
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多