DOM4J 读取XML配置文件进行数据库连接
介绍介绍DOM4J。
据说是非常优秀非常优秀的Java XML API(Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.)。
关于XML文件。
A君问了我一个问题,为什么java中XML作为配置文件,为什么不用其他的呢?像text文件等等。
我的第一个反应是,为(喂)什么就吃什么。。。然后再问为什么。。。开始的时候模仿着做,时间长的时候思
考一些经常使用的东西的原因,就像为什么同一个公司,他的职位比我高一样。。。我们需要的是思考和学习。。。
转回来说说我们配置文件的特点:我们在这里的配置文件需要能够存放少量的数据,并易于操作和维护。所以在
开始进行选择的时候就会综合考虑,text的特性,编码问题等等。所以综合考虑的话就会把XML作为j2ee的一个标准
而不是text作为j2ee的标准。(仅是我的理解......)
最开始我们连接数据库的方式:
/** * 取得connection
* @return
*
*/
public static Connection getConnection() throws ClassNotFoundException
{
//数据库连接对象。
Connection conn = null;
try
{
//驱动名称。
Class.forName("oracle.jdbc.driver.OracleDriver");
//数据库连接字符串。
String url = "jdbc:oracle:thin:@localhost:1521:BJPOWERNODE";
//oracle数据库用户名和密码。
String username = "drp";
String password = "drp";
//连接数据库。
conn = DriverManager.getConnection(url, username, password);
}catch(ClassNotFoundException e){
//打印错误。
e.printStackTrace();
}catch(SQLException e){
//打印错误。
e.printStackTrace();
}
//返回连接对象。
return conn;
}
进行了些许的优化:
我们把一些连接数据的配置文件放到XML文件中,很明显,我们这样做的目的,为了改变方便。从变化的角度来
预测问题,所以把最开始的配置数据放到连接数据库类的代码中,抽取出来了,我们放到了配置文件中。
连接的配置信息,我们放到web.xml中。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@localhost:1521:BJPOWERNODE</url>
<user-name>drp</user-name>
<password>drp</password>
</db-info>
</config>
这样抽取出来的话,我们要从这个XML文件中读取一些驱动名称,连接字符串,用户名称和密码信息了。
如果我们把读取和连接放到连接这个类(DbUtil数据库操作工具类)中的话,这个类的职责就太重,这样不利于
大型系统的扩展工作。于是,我们把读取配置文件这个工作给了专门的一个类来干这件事情,我们命名他为
XmlConfigReader ,用这个类读取XML文件。
从网上查找关于读取XML文件的文章,源码也很多,据说有四种方式,http://developer.51cto.com/art/201106/270685.htm 在这里就不详细说明了。我们这里采用的是DOM4j的方式来读取XML文件。主要是引入dom4j相应的包和在使用过程中查看dom4j的API就可以喽。
读取配置文件,我们读取的是字符串,驱动名称,连接字符串,用户名称和密码信息,他们是一个整体,我们函
数的返回值如果是字符串的话,再连接数据库的时候还要把这个长长的字符串分开,这样很不方便。于是我们把他们
进行了封装,我们把他们封装成为一个配置的工具类,JdbcConfig,这样我们传递一个整体就可以了。就像人是一个
整体的,我们不要把他的胳膊腿等分开传递。
我们封装的配置文件实体类:
/**
* jdbc配置信息。
* @author lovesummer
*
*/ public class JdbcConfig { //连接字符串。
private String url;
//用户名。
private String userName;
//密码。
private String password;
//驱动器的名称。
private String driverName;
public String getDriverName() {
return driverName;
} public void setDriverName(String driverName) {
this.driverName = driverName;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} //覆盖object的toString方法。
@Override
public String toString() {
// TODO Auto-generated method stub
return this.getClass().getName() + "{driverName:" + driverName + ", url:" + url + ",userName :" + userName + "}";
} }
我们读取配置文件的类:
package com.bjpowernode.drp.util;
import java.io.InputStream;
import javax.servlet.jsp.tagext.TryCatchFinally;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//读取配置文件类。
/**
* 采用单例模式解析sys-config.xml文件。
* 解析sys-config.xml文件。
*@author lovesummer
*
*/
public class XmlConfigReader { //勤汉式。
//私有的静态的成员变量。
private static XmlConfigReader instance = new XmlConfigReader(); //保存jdbc相关配置信息对象。
private JdbcConfig jdbcconfig = new JdbcConfig(); //私有的构造方法。
private XmlConfigReader()
{
SAXReader reader = new SAXReader(); //拿到当前线程。
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
try {
Document doc = reader.read(in);
//取得xml中的Element。1 、取出驱动器的名字。
Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name"); //2 、取出url字符串。
Element urlElt = (Element)doc.selectObject("/config/db-info/url");
//3、取出用户名称和密码。
Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
Element passwordElt = (Element)doc.selectObject("/config/db-info/password"); //取得jdbc相关配置信息。
jdbcconfig.setDriverName(driverNameElt.getStringValue());
jdbcconfig.setUrl(urlElt.getStringValue());
jdbcconfig.setUserName(userNameElt.getStringValue());
jdbcconfig.setPassword(passwordElt.getStringValue()); } catch (DocumentException e) {
// 打印错误
e.printStackTrace();
} } //公共的静态的入口方法。
public static XmlConfigReader getInstance()
{
return instance;
} /**
* 返回jdbc相关配置。
* @return
*/
public JdbcConfig getJdbcConfig(){ return jdbcconfig;
}
}
优化后我们连接数据库的类(就像改革开放前后的中国):
/**
* 封装数据库常用操作,工具类
* @author lovesummer
*
*/
public class DbUtil {
/**
* 取得connection
* @return
*
*/
public static Connection getConnection() throws ClassNotFoundException
{
Connection conn = null; try {
//新建jdbc配置类。
JdbcConfig jdbcconfig = XmlConfigReader.getInstance().getJdbcConfig();
//取出驱动器的名字。
Class.forName(jdbcconfig.getDriverName()); //取得连接对象。
conn = DriverManager.getConnection(jdbcconfig.getUrl(), jdbcconfig.getUserName(), jdbcconfig.getPassword()); } catch (ClassNotFoundException e) {
// 抛出 exception
e.printStackTrace();
}catch(SQLException e)
{
e.printStackTrace();
} return conn; } //测试。
public static void main(String[] args ) throws ClassNotFoundException{
System.out.println(DbUtil.getConnection());
} }
优化后把每个类的职责都分工明确了,在这基础上还可以再进行优化的。在这里就不讲述了。在这过程中学习到了
代码优化的这种思维方式,装上了程序员的思想,代码就这样一步步有了灵魂........加油.....
DOM4J 读取XML配置文件进行数据库连接的更多相关文章
- RSS阅读器(一)——dom4j读取xml(opml)文件
接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...
- DOM4J读取XML文件
最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...
- 【XML】利用Dom4j读取XML文档以及写入XML文档
Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
- 【XML配置文件读取】使用jdom读取XML配置文件信息
在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0& ...
- 使用dom4j 读取XML文件
第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...
- Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence
1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of ...
- [drp 3]读取Xml配置文件,连接数据库
导读:之前看一本XML的书,里面说到了对于XML的操作问题,但由于各方面的原因,一直没有总结.这次借着做项目,就总结总结对于XML文件的利用.主要是从配置数据库连接和保存数据这两方面来的.这篇博客介绍 ...
- dom4j读取xml
-----记录和回顾是一个比学习更重要的环节----- 一.首先,我们需要知道xml是做什么的 1.作为软件的配置文件 2.作为数据的载体(小型的数据库) 二.xml的语法 xml文件以xml后缀名结 ...
随机推荐
- 【HDOJ】2425 Hiking Trip
优先级队列+BFS. #include <iostream> #include <cstdio> #include <cstring> #include <q ...
- 最近 弄了一个 discuz 7.2,管理员发帖 会出现 很多错误,解决 办法 在别的帖子中找到了
公司弄了一个网站,是php 的 还要有 论坛,然后配置论坛配置 了 好几天,然后好不容易配置上了,发现以管理员 发帖 的时候, 页面就会出现 各种错误,各种 警告 解决办法 是,在bbs 文件夹 里 ...
- SRM 399(1-250pt)
DIV1 250pt 题意:给出一个size不超过50的数组a和整数n,求x,y,z使得|n - x*y*z|最小,且x,y,z均不再数组a中.若有多组xyz使得|n-x*y*z|最小,输出字典序最小 ...
- CentOS-6.4-i386硬盘安装
由于安装程序不能识别NTFS分区上的镜像,因此需要变通,网上可参考的文章分为两种方法: 1.使用分区工具创建EXT分区,再用Windows下可访问EXT分区的软件,将安装镜像拷入进行安装. 2.使用分 ...
- 存储的一些基本概念(HBA,LUN)
有些新手总是在各式各样的概念里绕来绕去,弄的不亦乐乎.所以我就把我的一些理解写了下来,供您参考.我说的不局限于任何一种具体产品和厂家,也可能有些说法和某些厂家的说法不一样,但是我觉得应该算的上是本原的 ...
- gradle 集成到myeclipse
新的项目用到gradle,所以学了下,地址:http://dist.springsource.com/release/TOOLS/gradle :help 下,安装好,重启即可,gradle作为mav ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- Android Intent简介
Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据,而针对这3大组件,有独立的Intent传输机制,分别如下:1. ...
- Linux服务器监控系统 ServMon V1.1---张宴
http://zyan.cc/post/291/ http://blog.zyan.cc/post/276/ http://zyan.cc/post/354/
- 第一篇:数据工程师眼中的智能电网(Smart Grid)
前言 想必第一次接触到智能电网这个概念的人,尤其是互联网从业者,都会顾名思义的将之理解为"智能的电网". 然而智能电网中的"智能"是广义上的智能,它就是指更好的 ...