转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
一个简单实用的数据库操作框架         ★★★★

一个简单实用的数据库操作框架

作者:闵涛 文章来源:闵涛的学习笔记 点击数:820 更新时间:2009/4/22 23:28:09
  前言

  学习JDBC以来一直想实现一个简单的封装来方便编程但是由于水平有限一直没有较好的办法,看了IBM开发网上的两篇文章以后感觉作者的设计思想很好一定能扩充成一个实用的JDBC封装。所以我在文章提供的源码基础上加了一些功能这些功能包括支持多种数据类型,处理了空值,利用反射方便的在Row对象和值对象之间进行转换,还有加了一个我自认为通用的DAO类来方便用户的操作。

  我把源码提供出来有两个目的一个是希望能帮助比我还初学的初学者熟悉JDBC,另外就是请各位高手不吝赐教,改进程序中的错误如果能将你们的对JDBC的封装方法提供出来那就更好了(不要说你们只用EJB或者Hibernate,JDO什么的?)。

  设计思想

   把DBMS抽象成类Database,这个类负责管理数据库连接以及提供表对象。

   把数据库中的一张或多张表抽象成类Table,这个类中提供对表的添加,修改,删除的JDBC封装。

   将数据库表中的一条记录抽象成类Row,这个类用HashMap保存关系数据库中表格中一行数据的字段名和值并提供一些相关操作。另外这个类还提供了两个静态方法用于在Row对象和ValueObject之间进行方便的转换。

   把对个Row的集合抽象成RowSet,这个类中用一个vector把多个Row对象保存起来并提供一些相关操作。

  代码分析

  由于已经给出源码所以我只对代码中关键的和需要注意的地方加以说明,大家可以执行源码一边演示一边体会。

   Database类源码如下:

package com.gdrj.util.database;
import java.sql.*;
import javax.sql.*;
import com.gdrj.util.servicelocator.*;
public class Database
{
 /**
 * 这个数据库连接成员只有在与数据库直接建立连接的情况下是有效的
 */

 private Connection conn = null;
 
 /**
 * 当这个参数有效时,表明程序是直接与数据库建立的连接而不是从连接池里取得连接
 */

 private String url, user, password;

 /**
 * 当这个参数有效时,表明程序是从连接池里取得连接。
 */

 private String datasource;


 /**
 * 用数据库地址,用户名,密码初始化数据库对象,这个构造器用于程序是直接
 * 与数据库建立连接的情况。
 * @param url
 * @param user
 * @param password
 */

 public Database(String url, String user, String password)
 {
  this.url = url;
  this.user = user;
  this.password = password;
 }
 /**
 * 用JNDI数据源名初始化数据库对象,这个构造器用于从连接池取数据库连接的情况。
 * @param datasource
 */

 public Database(String datasource)
 {
  this.datasource = datasource;
 }

 /**
 * 得到数据库连接,对于是否从连接池里取连接做了自动处理即根据用户调用了哪个构造器
 * 来判断是否直接与数据库建立连接还是从连接池里取连接。
 * 对于用户来说不用考虑程序是从那里取得连接,他只管正确的初始化数据库对象。
 * @return * @throws SQLException
 */

 public Connection getConnection() throws Exception
 {
  if (datasource == null)
  {
   //直接与数据库建立连接
   if (conn == null)
   {
    conn = DriverManager.getConnection(url, user, password);
   }
  }
  else
  {
   //从应用服务器的连接池里取得连接
   ServiceLocator sl = ServiceLocator.getInstance();
   DataSource ds = sl.getDataSource(datasource);
   return ds.getConnection();
   //每调用一次都返回一个连接池中的数据库连接
  }
  return conn;
 }

 /**
 * 释放连接,如果是直接与数据库连接的情况则什么也不做
 * 如果是从连接池中取得的连接那么释放传来的连接
 * @param conn
 */

 public void disConnect(Connection connection)
 {
  if (datasource != null)
  {
   //只处理从连接池取连接的情况
   try
   {
    if (connection != null)
    {
     connection.close();
    }
   }
   catch (Exception ex) {}
  }
 }

 /**
 * 得到与参数名对应的表对象,注意这里不作任何数据库操作
 * @param name
 * @return
 */

 public Table getTable(String name)
 {
  return new Table(this, name);
 }
}
  这个类是对DBMS的抽象,所以使用时应用程序中只要有一个Database对象就够了,如果你是以与数据库之间建立连接的方式使用那么你用Database(String url, String user, String password)构造器进行初始化。如果是从应用服务器的连接池中取得连接的方式使用那么用Database(String datasource)构造器初始化,这样以后你使用这个对象进行getConnection和disConnection时就不用去考虑始终保持一个连接(C/S方式),还是将连接返回连接池了因为在disConnection中已经做了处理。集体使用方法将Table类。在getConnection中的从连接池中取连接的代码你只要参考以下《J2EE核心模式》中的服务定位器模式就知道是怎么回事了,你在用Database(String url, String user, String password)初始化时其中的代码不起作用。

157


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台