`
cjnetwork
  • 浏览: 179494 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

PreparedStatement、Statement、ResultSet等一定要手动关闭

阅读更多

     在使用java开发后台应用程序的时候,如果需要使用数据库,特别是试用第三方的数据库连接池的时候,使用完PreparedStatement等一定要手动关闭,最好是将关闭的代码写到finally中,保证一定能够完成关闭。
     
     原因有如下两点:

      1、第三方的数据库连接池,使用的时候,获取到Connection之后,使用完成,调用的关闭方法(close()) ,并没有将Connection关闭,只是放回到连接池中,如果调用的这个方法,而没有手动关闭PreparedStatement等,则这个PreparedStatement并没有关闭,这样会使得开发的程序内存急速增长,java的内存回收机制可能跟不上速度,最终造成Out of memory Error。
    
      2、如过在PreparedStatement等调用的时候,发生异常,则这个PreparedStatement是没有被关闭的,因此最好将PreparedStatement等的关闭写到finally代码中。


Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
 try {
    //do something
 } catch (SQLException e) {
    throw e;
 }finally{ 
    if(rs != null) try{rs.close();}catch (Exception e2) {}
    if(pst != null) try{pst.close();}catch (Exception e2) {}
    if(con!= null) try{con.close();}catch (Exception e2) {}
 }
1
7
分享到:
评论
2 楼 dandongsoft 2013-10-18  
异常里面也应该关闭吧
1 楼 mercyblitz 2011-05-22  
JDK 7就不用了,他们都实现了java.lang.AutoCloseable.

相关推荐

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

    在传统的做法中,我们通常会采用try-catch-finally结构来手动关闭这些对象: ```java Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(DB_URL, ...

    PreparedStatement详细用法

    - **数据类型转换**:对于日期、时间等复杂数据类型的处理,`PreparedStatement`提供了专门的方法如`setDate()`、`setTime()`等,确保了数据的正确转换,避免了手动格式化字符串带来的错误和安全隐患。 **3. ...

    数据库编码解决方案

    2. _Statement类继承自_ResultSet,同样实现了InvocationHandler接口,用于处理对Statement或PreparedStatement的setString方法的调用,进行编码操作。 3. _ResultSet类主要关注getString方法,负责在获取结果时...

    jdbc连接各数据库及事务处理

    要手动控制事务,需要先关闭自动提交:`conn.setAutoCommit(false);` 2. 开始事务:手动开启事务,通常是在关闭自动提交之后立即进行的。 3. 执行操作:在事务内执行一系列数据库操作。 4. 提交或回滚:如果所有...

    java的JDBC连接

    它包括了多个接口和类,如Connection、Statement、PreparedStatement、ResultSet等,这些组件构成了JDBC的核心。 二、JDBC工作流程 1. 加载驱动:在使用JDBC前,我们需要加载对应的数据库驱动,这通常通过Class.for...

    Java数据库连接方法

    1. JDBC API:Java.sql包下的接口和类构成了JDBC API,如DriverManager、Connection、Statement、PreparedStatement和ResultSet等,它们提供了与数据库交互的一系列方法。 2. JDBC驱动:为了使Java程序能与特定的...

    JDBC与Java数据库程序设计(pdf格式).rar

    6. 关闭资源:执行完操作后,记得关闭ResultSet、Statement和Connection,以释放系统资源。 在Java中,我们可以使用连接池(如C3P0、HikariCP、DBCP等)来管理数据库连接,提高性能并避免资源泄露。连接池预先创建...

    映射ResultSet结果

    PreparedStatement stmt = conn.prepareStatement("SELECT * FROM table"); ResultSet rs = stmt.executeQuery(); ResultSetMapper<MyBean> mapper = new ResultSetMapper(MyBean.class); MyBean bean = mapper....

    JDBC操作(ppt)

    - JDBC API:Java.sql包下的接口和类,如Connection、Statement、PreparedStatement、ResultSet等,构成了JDBC的基础框架。 - JDBC驱动程序:分为四类,包括类型1到类型4,其中类型4是纯Java实现,性能较好且支持...

    用jdbc管理数据库连接.rar_java 教程

    - JDBC由一组接口和类组成,包括Connection、Statement、PreparedStatement、ResultSet等,它们提供了数据库操作的基本功能。 2. **数据库驱动**: - 在使用JDBC之前,需要在应用程序中加载相应的数据库驱动,这...

    JDBC简单的资料

    JDBC由一系列接口和类组成,包括DriverManager、Connection、Statement、PreparedStatement、ResultSet等。这些组件协同工作,实现了Java程序与数据库的连接和数据交互。 2. **驱动管理器(DriverManager)** ...

    JDBC PPT

    10. **JDBC API**:JDBC API主要包括java.sql和javax.sql包下的类和接口,如Connection、Statement、PreparedStatement、ResultSet、DriverManager等。 通过深入学习JDBC,我们可以熟练地进行数据库操作,理解...

    jdbc编程笔记(非常难得的资源)

    6. **关闭资源**:在操作完成后,关闭ResultSet、Statement和Connection,释放资源。 ### JDBC常见操作 - **插入数据**:使用PreparedStatement的executeUpdate()方法,将参数占位符与实际值匹配。 - **查询数据*...

    jdbc.rar_WORKING_jdbc

    6. **关闭资源**:关闭ResultSet、Statement和Connection,释放资源。 **实践中的JDBC使用技巧**: 1. **使用try-with-resources**:Java 7引入的新特性,可自动关闭流和连接,减少资源泄露。 2. **事务管理**:...

    craftsman_cake.rar

    为了优化性能,开发中通常会使用连接池(如C3P0、HikariCP、Apache DBCP等),预先创建并管理一定数量的数据库连接,避免频繁创建和关闭连接带来的开销。 六、JDBC优化策略 1. 使用PreparedStatement而非Statement...

    使用+JDBC+的高级数据库操作

    JDBC的核心组件包括Driver Manager、Connection、Statement、PreparedStatement、ResultSet等。 在高级数据库操作中,PreparedStatement是JDBC的一个重要特性。相较于Statement,PreparedStatement允许预编译SQL...

    JDBC笔记_JDBC学习笔记_

    4. 数据库连接的关闭:使用try-with-resources语句或finally块确保连接、Statement和ResultSet在使用完毕后正确关闭。 5. 使用数据库索引:为经常查询的字段创建索引,提高查询速度。 总结,Java JDBC提供了强大的...

    JDBC.rar_JDBC API_JDBC 接口

    6. 关闭资源:关闭ResultSet、Statement和Connection,释放数据库资源。 ### JDBC事务管理 JDBC支持两种事务隔离级别:自动提交和手动提交。默认情况下,每次SQL语句都会自动提交。可以通过Connection的...

    JDBC调用Oracle数据库.rar

    - 主要组件包括:DriverManager、Connection、Statement、PreparedStatement、ResultSet等。 2. **Oracle数据库** - Oracle是一种流行的商业关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。 - 在JDBC...

    JDBC包(SQLServer2000)

    主要组件包括`java.sql`和`javax.sql`包,其中包含了DriverManager、Connection、Statement、PreparedStatement、ResultSet等核心接口和类。 **2. 驱动程序类型** JDBC驱动程序有四种类型,针对SQL Server 2000的...

Global site tag (gtag.js) - Google Analytics