您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
一个简单实用的数据库操作框架
[文章信息]
作者:
时间:2004-02-04
出处:cn-java
责任编辑:方舟
[文章导读]
学习JDBC以来一直想实现一个简单的封装来方便编程但是由于水平有限一直没有较好的办法
advertisement
热点推荐
· 11.10软件精选 FW实用设计
· IE最新安全漏洞补救几大措施
· M牛的网络生活之下载篇
· Norton Ghost 9.0全新体验
· InstallShield简明使用教程之前言
[正文]

1 2 3 4  下一页

天极IT资讯短信服务 电脑小技巧
资费:包月5元
手机:
介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。


  前言

  学习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)初始化时其中的代码不起作用。


1 2 3 4  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 将存储过程封装为EJB组件的方法
  • 用Java实现网络语音信号传送
  • 利用Java三步实现Cool Button
  • 使用JDBC创建数据库访问程序
  • Oracle应用服务器实现Java CORBA
  • VIA驱动问题导致DVD刻录失败
  • [配置推荐]学生型闪龙配置
  • 11.10软件精选 FW实用设计
  • 精英主板全面迈进P5时代
  • 详解11月三大硬件杀手游戏及四大凶器
  • 选硬盘 用好希捷互动存储专家
  • NDS十大最受期待游戏
  • 中国星际个人联赛第6轮综述
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索