网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.如何搭建J2EE开发环境.
.java缓冲区溢出编程心得.
.数据库连接、设计以及备份技巧集.
.IntelliJ IDEA 版本5以及6的用户.
.适合于Cygwin的JVM(java虚拟机).
.教你一简单办法用Java获得IP地址.
.Java中文问题详解.
.使用消息框.
.Eclipse 3.2 Java开发工具的新特.
.使用JBuilder2007开发Web Servic.
.正确优雅的解决用户退出问题(转自.
.Java中与注释有关的语法.
.From Java to PHP.
.杂谈:Java编程思想面向对象逻辑.
.Java、XML与数据库编程实践(一).
.实现类似XP风格的快速按钮.
.JML起步--使用JML 改进你的Java程.
.使用Java蓝牙无线通讯技术API概述.
.Java入门笔记7_Stream.
.MVC 设计模式:将 Web 应用分三层.

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

发表日期:2008-1-5


  前言
  这个小小的数据库操作封装框架是参考IBM开发网上的两篇文章并在其基础上扩充了一些功能而得到的。所以首先要感谢两篇文章的作者。

  学习JDBC以来一直想实现一个简单的封装来方便编程但是由于水平有限一直没有较好的办法,看了IBM开发网上的两篇文章以后感觉作者的设计思想很好一定能扩充成一个实用的JDBC封装。所以我在文章提供的源码基础上加了一些功能这些功能包括支持多种数据类型,处理了空值,利用反射方便的在Row对象和值对象之间进行转换,还有加了一个我自认为通用的DAO类来方便用户的操作。
  我把源码提供出来有两个目的一个是希望能帮助比我还初学的初学者熟悉JDBC,另外就是请各位高手不吝赐教,改进程序中的错误假如能将你们的对JDBC的封装方法提供出来那就更好了(不要说你们只用EJB或者Hibernate,JDO什么的?)。

  IBM开发网的那两篇文章分别是《一个简单的 JDBC 包装器》《对一个简单的 JDBC 包装器的扩展及应用》,我的邮箱是xsimple2003@yahoo.com.cn有事请与我联系。

  设计思想

  把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 { //从应用服务器的连接池里取得连接

上一篇:JAVA经验谈:尽可能使用堆栈变量 人气:510
下一篇:Java经验点滴:类注释文档编写方法 人气:728
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐