`

JDBC中,Connection 、ResultSet 和 Statement 的关闭

 
阅读更多

一、JDBC中,如果ResultSet 和 Statement 不关闭的话,会有什么影响?

 

不使用连接池的情况下,如果你直接关闭连接话,对应的Statement,ResultSet对象都应该由Driver Vendor来帮你关闭,即由他来进行资源的释放.这个是由JDBC3.0规范中提到的.因为有些数据库资源可能属于GC不能释放的范围.

 

对于连接池的实现而言,有时间我看看Oracle和Postgres的实现再下定论吧.但是我认为出现上面的情况应该理解成为连接池vendor的一种没有按规范来实现的问题.如果用数据库自己实现的连接池应该不会有这样的情况出现.

这个关不关和使用不使用conn pool没有关系,一般操作是会是这样,线程从外界获取一个conn,然后创建自己地stmt,rs,然后执行逻辑操作,然后将conn返回给pool。 如果程序员忘记手动关地话。当这个线程执行完以后,stmt,rs都成垃圾,当他们被垃圾搜集地时候,gc会替我们把它们给关闭地。这就是很多代码没有关闭,仍然正常运行。
但是这样会有一个潜在地问题。就是gc无法确定什么时候运行。如果free地内存很多,很可能有些gc就不会被启动,这样stmt迟迟没有被关闭,执行一段时间会报错。
所以健壮地代码应该手工把rs,stmt都关闭

分享到:
评论

相关推荐

    怎样实现关闭connection时自动关闭Statement和ResultSet (下篇)

    在这个改进后的版本中,当离开try块时,所有的AutoCloseable对象(包括Connection、Statement和ResultSet)都会自动关闭,无论是否抛出异常,从而避免了资源泄露的问题。 此外,还可以考虑使用PreparedStatement和...

    描述Connection、Statement、ResultSet接口的作用

    标题和描述均聚焦于解释Java Database Connectivity (JDBC)中三个核心接口——`Connection`、`Statement`和`ResultSet`的作用。这三个接口是JDBC API的核心组成部分,它们共同协作,使得Java应用程序能够与各种关系...

    JdbcConnection

    本项目"JdbcConnection"利用了JDBC API,结合Servlet和Tomcat服务器,以及MySQL数据库,实现了数据的CRUD(Create、Read、Update、Delete)操作,展示了Web应用中数据库操作的基本流程。 首先,我们需要了解JDBC。...

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    而REF CURSOR则是PL/SQL(Oracle数据库的存储过程语言)中的一个概念,它相当于一个指向结果集的指针,可以在PL/SQL中动态打开和关闭。 在Oracle9i之前的版本,直接从Java存储过程返回ResultSet是不被支持的,因为...

    JDBC Connection Configuration.rar

    7. **关闭资源**:记得关闭Statement、ResultSet和Connection,释放资源。 ### 4. 连接池 为了提高性能和资源利用率,通常会使用连接池来管理数据库连接。例如Apache的Commons DBCP、C3P0和HikariCP等。连接池在...

    jdbc connection

    6. **关闭资源**:完成数据库操作后,必须关闭所有打开的资源,包括`ResultSet`、`Statement`和`Connection`,以释放数据库资源。 ### 数据库配置 在实际应用中,通常将数据库连接信息(如URL、用户名、密码)存储...

    JDBC(用PrepareStatement实现)

    执行完毕后,记得关闭PreparedStatement、ResultSet和Connection,以释放数据库资源。通常使用try-with-resources语句来自动关闭资源: ```java try (PreparedStatement pstmt = conn.prepareStatement(sql)) { ...

    JDBC PrepareStatement 使用(附各种场景 demo)

    在使用JDBC和PrepareStatement时,别忘了关闭资源,例如ResultSet、Statement和Connection,以避免内存泄漏。可以使用try-with-resources语句来确保资源的正确关闭。 这个资源提供的示例代码将帮助开发者深入理解...

    jdbc知识带注释

    记住使用完后要关闭`ResultSet`、`Statement`和`Connection`,以释放数据库资源: ```java rs.close(); stmt.close(); conn.close(); ``` 9. **预编译的PreparedStatement** `PreparedStatement`是`...

    JDBC常见易用的接口和类

    因此,如果读取一个 ResultSet 与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成,如果存在某个语句打开的当前 ResultSet 对象,则 Statement 接口中所有执行方法都会隐式关闭它。 ...

    mysql——connection -jdbc

    7. **关闭资源**:操作完成后,记得关闭`ResultSet`、`Statement`和`Connection`以释放资源,防止内存泄漏。 ODBC(Open Database Connectivity)数据源是另一种连接数据库的方式,它提供了一个标准接口,让不同的...

    JDBC6和JDBC14

    6. **关闭资源**:最后,确保关闭ResultSet、Statement和Connection以释放系统资源。 JDBC的使用大大简化了Java程序与数据库之间的交互,提供了标准接口,使得开发者无需关注底层数据库的差异,提高了代码的可移植...

    jdbc核心代码.docx

    JDBC核心代码详解 ...使用close()方法释放ResultSet、Statement和Connection对象,释放资源以避免内存泄露。 JDBC代码解释 以下是JDBC核心代码的解释: ```java ; charset=UTF-8" pageEncoding="UTF-8"%> ...

    ResultSet

    5. 关闭资源:处理完ResultSet后,别忘了关闭它,以及相关的Statement和Connection,以避免资源泄露。这通常在finally块中完成,以确保即使在异常情况下也能正确关闭: ``` try (ResultSet rs = stmt.executeQuery...

    jdbc.rar_jdbc jpa_jpa jdbc _statement

    把JDBC应用改成JPA程序,需要把原来...&#61550 使用DriverManager,Connection,Statement,ResultSet等; 而使用JPA完成数据的操作包括: &#61550 得到JDBC驱动程序; &#61550 得到持久性提供者相关类库和配置文件;

    JDBCconnection.java 代码

    在 `main` 方法中,创建了一个 `JDBCconnection` 实例,并调用 `creatConnection` 方法创建数据库连接。然后,执行一条查询语句,获取结果集并遍历输出每一行的 `adminid` 字段。最后,调用 `closeConnection` 方法...

    jdbc连接数据库getConnection 增、删、改、查

    public static void ReleaseSoucre(ResultSet rs, Statement stmt, Connection conn) { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch ...

    JDBC常考知识点,常用api

    6. 关闭资源:关闭ResultSet、Statement和Connection,释放数据库资源。 了解和熟练掌握这些JDBC基本知识点对于Java开发者来说至关重要,能够有效地进行数据库操作,同时确保代码的健壮性和兼容性。

Global site tag (gtag.js) - Google Analytics