2012-06-06 76 views
1

结果集关闭时语句会发生什么?ResultSet关闭时语句会发生什么?

Statement stmt = null; 
    ResultSet rs = null; 

    try { 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery(query.toString()); 
     ... 
    } 

    // lots of code 

    rs.close() 

注:一个结果对象被生成它当Statement对象关闭, 重新执行,或用于从 序列检索下一个结果的声明 对象自动关闭多个结果。

但是,当ResultSet先关闭时会发生什么?

对于这件事,首先会发生什么?

回答

6

您应该按照与创建对象相反的顺序关闭对象。首先,ResultSet,然后Statement,最后,Connection

如果您不关闭Statement它保持打开状态,您可以使用它执行另一个查询(如果它是PreparedStatementCallableStatement您可以更改查询参数)。

另请注意,您引用的是JDBC规范,并且它的实现取决于JDBC驱动程序提供者。通常,你不应该相信他们,并手动关闭这些对象。

另一件事 - 我认为更重要的是 - 如果您使用连接池(如JBoss),关闭连接只是将其释放回池中,并且不会释放底层对象。因此,建议您始终手动发布您创建的所有对象。

+0

+1说明。很好的一个 –

+0

当你关闭连接时,结果集和语句将被自动关闭... – Sajmon

+0

@ hawaii.five-0是的,除非它是一个连接池,并且你只是将连接释放回池中。 – npe

1

声明没有任何反应 - 它保持打开状态。您可以继续使用该声明,但一定要在完成后关闭它。

+0

难道你不觉得它更像评论而不是回答。 –

2

Statement实际上可以重复使用。尽管如果您重复相同的查询,您应该使用PreparedStatement,因为查询将被编译一次。

当然他们应该当你与他们所做的,但关闭ResultSet不会自动关闭Statement有很好的理由被关闭。

相关问题