张慧的博客

张慧的博客

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

本文主要简述的内容有单例设计模式、dom4j解析xml文件(这里解析的数据库的配置文件)、通过解析出来的配置信息完成数据库的连接。


1、首先要看的是单例设计模式

       单例设计模式的实现有两种:饿汉式(预先加载)、懒汉式(延迟加载),下面分别来看这两种实现方式。

(1)、饿汉式(预先加载)

public class Singleton{
    private static Singleton instance = new Singleton();
    
    private Singleton(){}

    public static synchronized Singleton getInstance(){
        return instance;
    } 
}
(2)懒汉式(延迟加载) 

public class Singleton{
    private static Singleton instance = null;
    
    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(instance==null){
             instance = new Singleton();
        }
        return instance;
    } 
}

观察上面的这两种模式,看起来区别并不大,前一种方式是类一旦加载就得将对象实例化了,而后一种则是在使用的时候才进行判断是否要实例化对象,并且在后一种的getInstance方法中加入了同步,这样显得更加的合理,个人更加偏好于使用第二种方式。


2、使用dom4j来完成数据库配置文件的解析

给出下面这个数据库的配置文件sys-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<config>
    <db-info>
        <driver>oracle.jdbc.driver.OracleDriver</driver>
        <url>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</url>
        <user>username</user>
        <password>password</password>
    </db-info>
</config>

完成解析的java类:

(1)、保存数据库jdbc配置信息的模型类JdbcConfig.java


package org.ml.drp.util;

/**
 * 用于保存数据库连接时的jdbc参数
 * 
 * 
@author MuLing
 * 
 
*/
public class JdbcConfig {
    private String DbDriver;
    private String DbUrl;
    private String DbUser;
    private String DbPass;

    public String getDbDriver() {
        return DbDriver;
    }

    public void setDbDriver(String dbDriver) {
        DbDriver = dbDriver;
    }

    public String getDbUrl() {
        return DbUrl;
    }

    public void setDbUrl(String dbUrl) {
        DbUrl = dbUrl;
    }

    public String getDbUser() {
        return DbUser;
    }

    public void setDbUser(String dbUser) {
        DbUser = dbUser;
    }

    public String getDbPass() {
        return DbPass;
    }

    public void setDbPass(String dbPass) {
        DbPass = dbPass;
    }

    @Override
    public String toString() {
        return "JdbcConfig [DbDriver=" + DbDriver + ", DbUrl=" + DbUrl
                + ", DbUser=" + DbUser + ", DbPass=" + DbPass + "]";
    }
}

(2)、解析数据库配置文件的工具类XmlConfigReader.java,这里使用单例模式完成,采用的是懒汉式。 

package org.ml.drp.util;

import java.io.InputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 用于解析xml文件 
 * 
@author MuLing
 *
 
*/
public class XmlConfigReader {  
    
    private JdbcConfig jdbcConfig = null;
    private static XmlConfigReader instance = null
    
    private XmlConfigReader(){
        SAXReader reader = new SAXReader();//取得SAXReader的对象
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");//得到输入流对象
        jdbcConfig = new JdbcConfig();
        Document doc = null;
        try {
            doc = reader.read(input); //进行读取
        } catch (DocumentException e) { 
            e.printStackTrace(); 
        }
                //取得对应的节点对象
               &nbsp;Element driverEle = (Element)doc.selectObject("/config/db-info/driver");
        Element urlEle = (Element)doc.selectObject("/config/db-info/url");
        Element userEle = (Element)doc.selectObject("/config/db-info/user");
        Element passwordEle = (Element)doc.selectObject("/config/db-info/password"); 

        jdbcConfig.setDbDriver(driverEle.getStringValue());
        jdbcConfig.setDbUrl(urlEle.getStringValue());
        jdbcConfig.setDbUser(userEle.getStringValue());
        jdbcConfig.setDbPass(passwordEle.getStringValue()); 
    }
    
    public static synchronized XmlConfigReader getInstance(){
        if(instance==null){
            instance = new XmlConfigReader();
        }
        return instance;
    }
    
    public JdbcConfig getJdbcConfig(){
        return this.jdbcConfig;
    }
}

3、根据解析出了的配置信息完成数据库的连接

下面是一个完成数据库连接操作的测试工具类DbUtil.java


package org.ml.drp.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 封装数据库常用操作类
 * 
@author MuLing
 *
 
*/
public class DbUtil {
  
    /**
     * 取得数据库的连接
     * 
@return
     
*/
    public static Connection getConnection(){
        Connection conn = null;        
        //取得数据库连接字符串
        JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
        String DBDRIVER = jdbcConfig.getDbDriver();
        String DBURL = jdbcConfig.getDbUrl();
        String DBUSER = jdbcConfig.getDbUser();
        String DBPASS = jdbcConfig.getDbPass();
        //1:注册驱动
        try {
            Class.forName(DBDRIVER);
        } catch (ClassNotFoundException e) { 
            e.printStackTrace();
        }
        //2:获取连接
        try {
            conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        } catch (SQLException e) { 
            e.printStackTrace();
        }
        //3:返回数据库连接
        return conn;
    }
    
    //测试数据库的连接是否成功
    public static void main(String args[]){ 
        System.out.println(DbUtil.getConnection());
    }
}

上完成了单例模式下使用dom4j来读取数据库配置文件,并实现数据库的连接操作。 




posted on 2012-08-08 23:37 张慧 阅读(1325) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: