`

转载:单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接

    博客分类:
  • Java
阅读更多
转自:http://www.blogjava.net/hongqiang/archive/2012/08/08/385091.html
声明:本人转载只为分享,如涉及商业版权纠纷,请及时与本人联系,必将立即删除,造成不便,还望见谅,谢谢。

本文主要简述的内容有单例设计模式、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());
    }
}
分享到:
评论
2 楼 yehayeah 2012-08-28  
ljm653467 写道
嗯,很好,可以借鉴,不过我想问的是在你上面的代码基础上,如果我把你的配置文件sys-config.xml利用struts2显示到了jsp页面上,这个我还勉强实现,重点是我想在jsp页面上修改这个配置文件sys-config.xml,然后在利用 dom4j重新生成新的sys-config.xml配置文件覆盖旧的xml,完成配置文件xml的修改和显示,不知道你听明白没有???求教了!!!!!!

我看懂你的问题,有点类似于数据库访问层的改查操作,但现在操作的对象是xml文件,一时也不知道怎么实现,欢迎互相学习,呵呵。
1 楼 ljm653467 2012-08-26  
嗯,很好,可以借鉴,不过我想问的是在你上面的代码基础上,如果我把你的配置文件sys-config.xml利用struts2显示到了jsp页面上,这个我还勉强实现,重点是我想在jsp页面上修改这个配置文件sys-config.xml,然后在利用 dom4j重新生成新的sys-config.xml配置文件覆盖旧的xml,完成配置文件xml的修改和显示,不知道你听明白没有???求教了!!!!!!

相关推荐

    dom4j学生考试系统代码 java源代码 xml存储数据

    【标题】"dom4j学生考试系统...通过学习和理解这个项目,开发者不仅可以提升DOM4J和Java编程的技能,还能了解如何在实际项目中使用XML进行数据存储,这对于理解和构建类似的基于XML的数据处理应用具有很高的参考价值。

    xml与数据库中数据的导入导出

    8. **设计模式**:在处理XML与数据库交互的过程中,可能会用到工厂模式(创建数据库连接)、单例模式(管理数据库连接池)等设计模式,以提高代码的可维护性和复用性。 9. **性能优化**:大量数据导入导出时,可能...

    xml.rar_XML java_java xml_xml_xml 数据库

    在Java编程中,XML与Java的结合使用是相当常见的,尤其是在数据交换、配置文件、以及与数据库交互等方面。这个"xml.rar"压缩包显然包含了一些关于XML在Java环境中的应用实例。 首先,从标题和描述中我们可以推测,...

    DBXML.ZIP_XML mysql_dbxml_netbeans mysql_netbeans platform_xml m

    7. **XML解析器**:为了读取和写入XML文件,程序可能使用DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)等解析器。 8. **项目构建与部署**:在NetBeans中,开发者可以方便地构建和部署应用...

    一个基于Java快速开发框架,支持mysql、xml、json等的基本操作。.zip

    在快速开发框架中,Java通常通过使用设计模式(如工厂模式、单例模式)来实现模块化的代码结构,提高代码的复用性和可扩展性。 MySQL是一个广泛使用的开源关系型数据库管理系统,它与Java的集成非常紧密。在Java...

    MybatisGenerator源码

    MybatisGenerator是一款强大的自动化代码生成工具,主要用于简化Mybatis框架的使用,自动生成Mapper接口、XML配置文件以及...同时,这也是一次深入学习Java编程、XML解析、数据库操作、设计模式等多方面技术的好机会。

    2022年学习java项目总结.docx

    4. **XML解析**:利用jdom或dom4j库解析配置文件`web.xml`,获取和处理项目配置信息。 5. **JDBC**:通过JDBC连接数据库,执行SQL语句,实现了数据库的增删改查操作。 6. **数据库连接池**:使用连接池如C3P0或...

    java十大经典案例

    10. **XML解析**:使用DOM或SAX解析XML文档,理解XML在数据交换和配置文件中的角色,以及Java如何处理XML数据。 以上案例涵盖了Java编程的多个核心领域,对于初学者和有经验的开发者来说,都是巩固基础、提升技能的...

    《PHP5高级应用开发实践》 (高清中文PDF版)

    - 设计模式运用:单例模式、工厂模式等常见模式的应用场景分析。 - 反射机制详解:运行时获取类信息并操作对象的方法。 - **实战案例分析** - MVC框架搭建:利用OOP特性构建可维护性强的Web应用。 - ORM技术实践...

    Java通用范例开发金典源代码

    - 单例模式、工厂模式、观察者模式等常见设计模式的Java实现。 这些源代码示例为开发者提供了丰富的实践机会,通过对这些代码的学习和调试,可以加深对Java编程的理解,提升编程技能,并为实际项目开发打下坚实...

    hibernate-3.2.6完整jar包+src

    4. `dom4j-1.6.1.jar`:DOM4J是一个流行的XML处理库,Hibernate用它来读写XML配置文件。 5. `javassist.jar`:另一种用于字节码操作的库,Hibernate也可以使用它来生成代理类。 6. `commons-collections.jar`:...

    Java补充实验.doc

    11. **单例模式与枚举**:设计模式中的单例模式,以及枚举类型在Java中的使用。 实验报告中包含的两个具体问题示例展示了如何运用Java解决实际问题: 1. **出现次数最多的数**:该问题使用ArrayList存储输入的整数...

    java简历样本

    - XML:熟悉XML文档结构,了解如何使用DOM或SAX解析XML文档。 - Linux:掌握Linux的基本命令,了解如何在Linux环境下安装和配置Java运行环境。 通过这份简历样本,我们可以看出一个合格的Java工程师不仅需要具备...

    类似QQ的通讯工具源代码

    开发者还计划进一步完善该项目,未来可能会增加对其他数据库系统的支持,同时,他还提到了使用XML来保存数据,XML是一种常见的数据存储和交换格式,因其结构清晰、易于解析,常用于配置文件或数据备份。 关于Java...

    java面试题

    答:单例模式是一种比较常见的设计模式,带给我们以下好处: 1:控制资源的使用 2:控制实例的产生数量 3:让多个不相关的两个线程或进程之间实现通信 为什么要用spring? 答:1、主要将各个框架有效的联系起来...

    JAVA经典面试题

    例如,在用户数据管理中使用单例模式,确保全局唯一的数据源。 2. **MVC模式**:模型(Model)-视图(View)-控制器(Controller),是Web开发中最常用的架构模式之一,用于分离业务逻辑、数据和界面展示。 3. **工厂模式*...

    基于Java的实例源码-类似QQ的聊天软件JAVA版源码(附设计文档).zip

    6. **设计模式**:在大型项目中,设计模式如单例模式、工厂模式、观察者模式等会广泛应用,以提高代码的可维护性和可扩展性。 7. **数据库操作**:为了存储用户信息、聊天记录等,项目可能使用MySQL或其他关系型...

Global site tag (gtag.js) - Google Analytics