前言 在基于 J2EE 平台的应用 开发 中,大多数的应用都需要跟 数据库 打交道;而自从接触 JDBC 起,我们便不止一次的被告之:数据库资源是十分宝贵的系统资源,一定要谨慎使用。但令人遗憾的是" name="description" />
在基于J2EE平台的应用开发中,大多数的应用都需要跟数据库打交道;而自从接触JDBC起,我们便不止一次的被告之:数据库资源是十分宝贵的系统资源,一定要谨慎使用。但令人遗憾的是,在笔者见过的大部分跟数据库相关的应用开发中,针对数据库资源的使用总是充斥着这样或者那样的问题。在本文中,笔者针对常见的一些错误或者不当的使用数据库资源的案例进行介绍与分析,并阐述金蝶Apusic应用服务器提供的一些增值特性,通过这些特性能够有效的避免某些错误的发生。
申请了数据库连接,却没有及时的关闭它,这几乎是最常见的数据库连接使用错误。犯这种错误的原因有很多,以下是常见的一种低级错误:
| public void foo() { |
Connection conn = getConnection(); | |
| Statement stmt = null; |
| try { |
conn = getConnection(); | |
| stmt = conn.createStatement(); |
| } catch (Exception e) { |
| } finally { |
| close(stmt, conn); |
| } |
| } <示例代码一> |
在上述案例中的第
避免这种错误的方法有很多,譬如,可采用类似于开源工具,能够对">FindBugs(注1)的代码分析工具对应用的源码进行分析,找出可能产生错误的代码。
此外,在应用中,我们需要非常频繁的对申请的数据库连接进行关闭与释放,此时,建议封装成某些工具类使用,并且要尽可能安全的关闭数据库连接。下面,我们以关闭Statement及Connection的通用close方法的不同实现方案来比较:
不安全的关闭方法:
| private void close(Statement stmt, Connection conn) { |
| try { |
stmt.close(); | |
conn.close(); | |
| } catch (Exception e) { |
| } |
<示例代码二> |
在上述代码中,倘若第
安全的关闭数据库资源方法:
| private void close(Statement stmt, Connection conn) { |
| try { |
if(stmt!=null) stmt.close(); | |
| } catch (Exception e) {} |
| try { |
if(conn!=null) conn.close(); | |
| } catch (Exception e) {} |
| } |
<示例代码三> |
在修订后的代码中,我们可以看到,无论第
这些常用的数据库资源操作公用类,可以使用Apache的Commons DbUtils(注2)组件。