在使用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) {}
}
分享到:
相关推荐
在传统的做法中,我们通常会采用try-catch-finally结构来手动关闭这些对象: ```java Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(DB_URL, ...
- **数据类型转换**:对于日期、时间等复杂数据类型的处理,`PreparedStatement`提供了专门的方法如`setDate()`、`setTime()`等,确保了数据的正确转换,避免了手动格式化字符串带来的错误和安全隐患。 **3. ...
2. _Statement类继承自_ResultSet,同样实现了InvocationHandler接口,用于处理对Statement或PreparedStatement的setString方法的调用,进行编码操作。 3. _ResultSet类主要关注getString方法,负责在获取结果时...
要手动控制事务,需要先关闭自动提交:`conn.setAutoCommit(false);` 2. 开始事务:手动开启事务,通常是在关闭自动提交之后立即进行的。 3. 执行操作:在事务内执行一系列数据库操作。 4. 提交或回滚:如果所有...
它包括了多个接口和类,如Connection、Statement、PreparedStatement、ResultSet等,这些组件构成了JDBC的核心。 二、JDBC工作流程 1. 加载驱动:在使用JDBC前,我们需要加载对应的数据库驱动,这通常通过Class.for...
1. JDBC API:Java.sql包下的接口和类构成了JDBC API,如DriverManager、Connection、Statement、PreparedStatement和ResultSet等,它们提供了与数据库交互的一系列方法。 2. JDBC驱动:为了使Java程序能与特定的...
6. 关闭资源:执行完操作后,记得关闭ResultSet、Statement和Connection,以释放系统资源。 在Java中,我们可以使用连接池(如C3P0、HikariCP、DBCP等)来管理数据库连接,提高性能并避免资源泄露。连接池预先创建...
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM table"); ResultSet rs = stmt.executeQuery(); ResultSetMapper<MyBean> mapper = new ResultSetMapper(MyBean.class); MyBean bean = mapper....
- JDBC API:Java.sql包下的接口和类,如Connection、Statement、PreparedStatement、ResultSet等,构成了JDBC的基础框架。 - JDBC驱动程序:分为四类,包括类型1到类型4,其中类型4是纯Java实现,性能较好且支持...
- JDBC由一组接口和类组成,包括Connection、Statement、PreparedStatement、ResultSet等,它们提供了数据库操作的基本功能。 2. **数据库驱动**: - 在使用JDBC之前,需要在应用程序中加载相应的数据库驱动,这...
JDBC由一系列接口和类组成,包括DriverManager、Connection、Statement、PreparedStatement、ResultSet等。这些组件协同工作,实现了Java程序与数据库的连接和数据交互。 2. **驱动管理器(DriverManager)** ...
10. **JDBC API**:JDBC API主要包括java.sql和javax.sql包下的类和接口,如Connection、Statement、PreparedStatement、ResultSet、DriverManager等。 通过深入学习JDBC,我们可以熟练地进行数据库操作,理解...
6. **关闭资源**:在操作完成后,关闭ResultSet、Statement和Connection,释放资源。 ### JDBC常见操作 - **插入数据**:使用PreparedStatement的executeUpdate()方法,将参数占位符与实际值匹配。 - **查询数据*...
6. **关闭资源**:关闭ResultSet、Statement和Connection,释放资源。 **实践中的JDBC使用技巧**: 1. **使用try-with-resources**:Java 7引入的新特性,可自动关闭流和连接,减少资源泄露。 2. **事务管理**:...
为了优化性能,开发中通常会使用连接池(如C3P0、HikariCP、Apache DBCP等),预先创建并管理一定数量的数据库连接,避免频繁创建和关闭连接带来的开销。 六、JDBC优化策略 1. 使用PreparedStatement而非Statement...
JDBC的核心组件包括Driver Manager、Connection、Statement、PreparedStatement、ResultSet等。 在高级数据库操作中,PreparedStatement是JDBC的一个重要特性。相较于Statement,PreparedStatement允许预编译SQL...
4. 数据库连接的关闭:使用try-with-resources语句或finally块确保连接、Statement和ResultSet在使用完毕后正确关闭。 5. 使用数据库索引:为经常查询的字段创建索引,提高查询速度。 总结,Java JDBC提供了强大的...
6. 关闭资源:关闭ResultSet、Statement和Connection,释放数据库资源。 ### JDBC事务管理 JDBC支持两种事务隔离级别:自动提交和手动提交。默认情况下,每次SQL语句都会自动提交。可以通过Connection的...
- 主要组件包括:DriverManager、Connection、Statement、PreparedStatement、ResultSet等。 2. **Oracle数据库** - Oracle是一种流行的商业关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。 - 在JDBC...
主要组件包括`java.sql`和`javax.sql`包,其中包含了DriverManager、Connection、Statement、PreparedStatement、ResultSet等核心接口和类。 **2. 驱动程序类型** JDBC驱动程序有四种类型,针对SQL Server 2000的...