快速业务通道

Spring JDBC抽象框架简化Web数据库开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

Spring JDBC抽象框架简化Web数据库开发

时间:2011-01-06 天极 朱先忠

一.引言

Spring是一个轻量级的应用程序框架。在许多情况中,Spring都能够良好地代换传统的由Java EE应用程序服务器所提供的服务。Spring既是综合性的也是模块化的。基于其分层架构,它能够使开发者灵活地单独使用其任何一部分。Spring由许多模块组成,例如IoC容器,AOP,MVC,持久性,DAO和remoting。这些模块都是相当松耦合的:其中,一些模块的使用根本不需要另一些模块。以前,简直还没有象Spring应用程序这样的:你可以选择使用一些,大多数,或所有的Spring框架支持的组件来构建你的应用程序。

Spring框架所提供的JDBC支持与其它Spring部分并非是紧耦合的,这极有利于代码的可维护性。本文将向你展示任何直接使用JDBC(也即是,不通过一些O/R映射框架本身使用JDBC)的应用程序是如何从Spring中受益的。

二.传统型JDBC

传统型JDBC有许多积极的方面使之在许多J2SE和J2EE应用程序开发中占有重要地位。然而,也有一些特征使其难于使用:

开发者需要处理大量复杂的任务和基础结构,例如大量的try-catch-finally-try-catch块。

应用程序需要复杂的错误处理以确定连接在使用后被正确关闭,这样以来使得代码变得冗长,膨胀,并且重复。

JDBC中使用了极不明确性的SQLException异常。

JDBC没有引入具体的异常子类层次机制。

相应于任何一种错误,都只是抛出SQLException异常-无论它来源于JDBC驱动程序还是来源于数据库,这使得程序员很难理解到底是哪里实际出现了错误。例如,如果SQL对象是无效的或已经被锁定,那么将抛出一个SQLException异常。调试这样的异常需要一定的时间来检查SQL状态值和错误代码。更有甚者,SQL状态值和错误代码的含义在各种数据库之间都有些差别。

事实证明,编写JDBC代码并不是一项容易的工作-存在大量的重复性的工作。为了说明问题,下面是一个例子-使用传统型JDBC来从数据库中得到一个可用任务的列表。

package com.spring.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; public class TraditionalJDBC {   public Vector getTasksNames() {    Connection con = null;    PreparedStatement pstmt = null;    ResultSet rs = null;    Vector task = new Vector();    try {     con = getConnection();     pstmt = con.prepareStatement( "select TASKNAME from tasks");     rs = pstmt.executeQuery();     while (rs.next()) {      task.add(rs.getString(1));     }    } catch (SQLException e) {     System.out.println(e);    } finally {     try {      rs.close();      pstmt.close();      con.close();     } catch (SQLException e1) {      System.out.println(e1);     }    }    return task;   }   private Connection getConnection()throws SQLException {    try {     DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());     return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott","tiger");    } catch (SQLException sqle) {     System.out.println(sqle);     return null;    }   }   public static void main(String[] args) {    TraditionalJDBC obj = new TraditionalJDBC();    Vector task = obj.getTasksNames();    for (int i =

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号