自行开发了个可重用的数据库连接框架

2008-02-23 10:10:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在开发有关数据库的应用时,虽然JDBC提供给我们许多便利,但在我们开发不同的应用的时候还是会重复着一些相同的工作,比如说编写数据库连接的程序,工作虽然不算多,但不断地重复实在是浪费时间,也增加了调试的复杂度;还有一点,我们应该尽量使用配置的数据源,笔者用的是MySQL,当用到中文应用上的时候Mysql的数据源没办法解决中文问题,另一方面又不希望每次都手动创建连接。基于以上遇到的两个小障碍,我编写了一个小框架,实现数据库使用方法最简单,能创建数据连接池。这些工作的实现都不需要再编程。
在Web应用中我们只需要在WEB-INF文件夹下面加入一个DBconfig.properties的文件,简单设置几个参数,再在Web.XML文件内加入一个listener元素即可。凡是JDBC支持的数据库类型都可以通过这两个文件来设置得到与数据库的连接。有了这个基础,开发者可以只需要考虑业务上的编程。比如说要实现什么样的查询和数据操作,开发者只需要定义这些业务上的方法即可。这样对开发效率来说大有改善。当然,如果在一些大的应用里面,用到ORM框架的话,这个框架就派不上用场了。这个小框架只适用于中小型的“利用关系数据库本土语言来工作”的应用。
使用的步骤:
一、配置DBconfig.properties
DBconfig.properties的设置例子如下:

url=jdbc:mysql://localhost:3306/article?useUnicode=true&characterEncoding=GB2312
user=dbuser
passWord=227711
DriverName=com.mysql.jdbc.Driver
maxConnections=10

url参数指定所要的数据库连接的URL。
user参数是连接该数据库的用户名
passWord参数是连接用户的密码
DriverName参数是所用数据库类型的驱动类
maxConnections可以设置最大连接数目
二、配置Web.xml:

在Web.xml中这样设置便可:
<web-app>
<listener>
<listener-class>bbmyth.util.dataBase.DataSourceProviderServlet</listener-class>
</listener>
</web-app>
不要去改变<listener>里面的所有东西。
三、用本应用包的API来编写业务程序

确保bbmyth.util.dataBase这个应用包在你的ClassPath(供编译程序用)中,或直接将该包Import入来。

最后定义自已的数据库操作Bean。注意这个Bean要继承bbmyth.util.dataBase.DBManager类,在这个DBManager类里提供了四个数据库操作变量:
Connection con:是连接类,框架已提供现成的连接,开发者可在程序里以下面的语句来获得数据库的连接:con=getConnection();
Statement smt:是查询语句类的变量,可直接使用;
PreparedStatement psmt:是预编译查询语句类的变量,可直接使用;
ResultSet rs:是结果集的变量,可直接使用。
每一次连接使用完之后,不管是用编译语句还是预编译语句和有没有返回结果集都可以直接用closeAll()函数来关闭它们,不推荐用他们自已的close()方法。

四、在JSP中应用UseBean标签把该业务JavaBean应用进去,然后用SetProperty标签设置其一个参数。如:
<jsp:setProperty name="articledb" property="provider" value="<%=application.getAttribute("CONNECTOR")%>"/>
articledb是你自已的UseBean定义的Id。其他的不要改动。

五、调试运行!这样,就可以按照用户给的参数,自动在应用启动的时候创建所需要的连接池。在应用退出的时候释放连接。用Mysql在配置数据源因为总是加不了中文编码的参数,而在这里,可以直接在URL里加入中文参数。既实现了数据库连接的便利,又解决了中文连接的问题。

工作原理:
工作原理很简单:一个类实现了ServletContextListener的接口,可以实现Web应用的事件监听。我在应用的启动的时候读进配置文件的参数,然后按照参数连接数据库,把完成的连接存放到一个Bean当中,然后把这个Bean作为一个变量存放在ServletContext中即Jsp的Application范围中,整个应用都可以使用的。
接着,编写业务方法是用了该包里面的API,在Jsp页面里使用这个连接池实例的时候要通过UseBaen和SetProperty的标签来把ServletContext中的连接池变量作为参数用到自已的业务Bean来,这样就可以使用现成的连接池工作了。
另外,用户写业务Bean的时候继承DBManager类。该类已经定义好了一些必要的变量和实现了连接。用户可以直接开始写自已的业务逻辑方法。只须要知道要怎样开始,怎样结束就得了。
下面是该应用包的源代码:共有三个类文件,DataSourceProviderServlet .java在应用启动的时候生成连接存放到ConnectionProvider.java的类中。DBManager则是为编程提供便利的。
/*******************************************************************/
一、DataSourceProviderServlet .java

package bbmyth.util.dataBase;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContext;
import java.util.*;
import java.io.*;
import javax.sql.*;
import java.sql.*;

public class DataSourceProviderServlet implements ServletContextListener
{

public void contextDestroyed(ServletContextEvent sce)
{
/*本方法是在应用退出时由系统调用的,在这个时候我们
把所有的连接都关闭!*/
((ConnectionProvider)(sce.getServletContext().getAttribute("CONNECTOR"))).destroy();
sce.getServletContext().removeAttribute("CONNECTOR");

}
public void contextInitialized(ServletContextEvent sce)
{
/*本方法在应用初始时调用,这时我们可以创建连接并且存到
一个容器当中,存储在应用的上下文中,然后交由一个JavaBean
处理。*/
Properties ps=new Properties();
Vector connections=new Vector();
String url=null;
String user=null;
String passWord=null;
int maxConnections;
String DriverName=null;
ServletContext context=sce.getServletContext();

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:CruiseControl简介

下一篇:Substitute Algorithm