搜索
首页数据库mysql教程DOM4J 读取XML配置文件进行数据库连接

DOM4J 读取XML配置文件进行数据库连接

Jun 07, 2016 pm 03:12 PM
dom4jxml介绍数据库读取进行连接配置文件

介绍介绍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.

    介绍介绍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文件等等。

DOM4J 读取XML配置文件进行数据库连接

   我的第一个反应是,为(喂)什么就吃什么。。。然后再问为什么。。。开始的时候模仿着做,时间长的时候思

考一些经常使用的东西的原因,就像为什么同一个公司,他的职位比我高一样。。。我们需要的是思考和学习。。。

   转回来说说我们配置文件的特点:我们在这里的配置文件需要能够存放少量的数据,并易于操作和维护。所以在

开始进行选择的时候就会综合考虑,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配置文件进行数据库连接DOM4J 读取XML配置文件进行数据库连接

 

 

    优化后把每个类的职责都分工明确了,在这基础上还可以再进行优化的。在这里就不讲述了。在这过程中学习到了

代码优化的这种思维方式,装上了程序员的思想,代码就这样一步步有了灵魂........加油.....

 

 

 

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您什么时候应该使用复合索引与多个单列索引?您什么时候应该使用复合索引与多个单列索引?Apr 11, 2025 am 12:06 AM

在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

如何识别和优化MySQL中的慢速查询? (慢查询日志,performance_schema)如何识别和优化MySQL中的慢速查询? (慢查询日志,performance_schema)Apr 10, 2025 am 09:36 AM

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL:开发人员的基本技能MySQL和SQL:开发人员的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

描述MySQL异步主奴隶复制过程。描述MySQL异步主奴隶复制过程。Apr 10, 2025 am 09:30 AM

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

mysql:简单的概念,用于轻松学习mysql:简单的概念,用于轻松学习Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL:数据库的用户友好介绍MySQL:数据库的用户友好介绍Apr 10, 2025 am 09:27 AM

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDB缓冲池如何工作,为什么对性能至关重要?InnoDB缓冲池如何工作,为什么对性能至关重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL:初学者的数据管理易用性MySQL:初学者的数据管理易用性Apr 09, 2025 am 12:07 AM

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器