`
百合不是茶
  • 浏览: 344864 次
社区版块
存档分类
最新评论

Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)

阅读更多

    XML配置数据库文件的连接其实是个很简单的问题,为什么到现在才写出来主要是昨天在网上看了别人写的,然后一直陷入其中,最后发现不能自拔 所以今天决定自己完成 ,,,,现将代码与思路贴出来供大家一起学习

 

XML配置数据库的连接主要技术点的博客;

JDBC编程 : JDBC连接数据库

DOM解析XML:  DOM解析XML文件

SAX解析XML  :SAX解析XML

 

难点:判断数据库的连接有很多种方式,SAX采用的事结束文本读取的时候判断,DOM采用的事全部解析完了再判断

 

XML文档  Config.xml

<?xml version="1.0" encoding="utf-8" ?>
<!-- 连接数据库的配置文件 -->
<sqlConnection>
	<sql id="oeacle11g">
		<driver>oracle.jdbc.driver.OracleDriver</driver>
                 <url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</url>
		<use>scott</use>
		<pwd>tiger</pwd>
	</sql>
	<sql id="sql2005">
		<driver>com.microsoft.sqlserver.jdbc.SQLServerDriver.class</driver>
                <url>jdbc:sqlserver://localhost:1433;databaseName=newer</url>
		<use>sa</use>
		<pwd>123</pwd>
	</sql>

</sqlConnection>

 

DOM解析和SAX解析XML文档的属性类;

package xml配置数据库连接;

/**
 * 配置数据库的连接属性
 * 
 * @author Administrator
 * 
 */
public class ConfigSql {
	public String id;
	public String url;
	public String driver;
	public String use;
	public String pwd;

	 @Override
	 public String toString() {
	 // TODO Auto-generated method stub
	 return id + " _" + driver+ "_" + url + "_ " + use + "_" + pwd;
	 }
}

 

1, DOM技术解析XML文档

package xml配置数据库连接;

import java.sql.DriverManager;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * DOM解析XML文档
 * 
 * @author Administrator
 * 
 */
public class DOMParse {
	// 创建队列保存对象
	private static ArrayList<ConfigSql> liststu = new ArrayList<ConfigSql>();
	// 设置对象
	static ConfigSql stu = null;

	public static void main(String[] args) throws Exception {
		long l1 = System.currentTimeMillis();
		String path = "C:\\Users\\Administrator\\Desktop\\xml\\Config.xml";

		// 1,实例化一个用来生产DOM解析器的工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

		// 2使用工厂得到一个DOM解析器对象
		DocumentBuilder builder = factory.newDocumentBuilder();

		// 3,给定制定的xml文件
		Document doc = builder.parse(path);

		pausexml(doc);
		// 遍历队列
		for (int i = 0; i < liststu.size(); i++) {
			ConfigSql stu = liststu.get(i);
			System.out.println(stu);
			if("oeacle11g".equals(stu.id)){
				System.out.println(stu.id);
				try {
					// 加载驱动类
					Class.forName(stu.driver);
					// 定义字符串
					String dri = stu.url;
					// 连接数据库
					DriverManager.getConnection(dri, stu.use, stu.pwd);
					System.out.println("连接上了数据库");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		long l2 = System.currentTimeMillis();
		long end = l2 - l1;
		System.out.println("解析时间:" + end + "ms");
	}

	// 解析xml的方法
	public static void pausexml(Node node) {
		// 获得所有的子节点,得到所有子节点的节点队列
		NodeList list = node.getChildNodes();
		// 遍历队列,依次取出
		for (int i = 0; i < list.getLength(); i++) {
			Node node1 = list.item(i);
			// 遍历节点的名称和值
			String str = node1.getNodeName();
			// System.out.println(val);

			// 判断Node1是不是元素
			if (node1 instanceof Element) {
				if (str.equals("sql")) {
					// 创建对象
					stu = new ConfigSql();
					// 将创建的对象放到队列中
					liststu.add(stu);

					// 获得该节点元素的属性
					NamedNodeMap nnm = node1.getAttributes();
					// 遍历节点中的元素
					for (int j = 0; j < nnm.getLength(); j++) {
						Node nodelist = nnm.item(j);
						// 根据遍历出来的元素得到该节点元素属性的名字和值
						String name = nodelist.getNodeName();
						stu.id = nodelist.getNodeValue();
					}
				}
				if (str.equals("driver")) {
					stu.driver = node1.getTextContent();

				}
				if (str.equals("url")) {
					// 如果标签是sex
					stu.url = node1.getTextContent();
					// System.out.println(sex + ">>>>>>>>>>>>>>>>>>>>");
				}
				if (str.equals("use")) {
					stu.use = node1.getTextContent();
					// System.out.println(cla + "<<<<<<<<<<<<<<<");
				}
				if (str.equals("pwd")) {
					stu.pwd = node1.getTextContent();
					// System.out.println(cla + "<<<<<<<<<<<<<<<");
				}

			}

			pausexml(node1);
		}

	}

}

 运行结果;

oeacle11g _oracle.jdbc.driver.OracleDriver_jdbc:oracle:thin:@127.0.0.1:1521:orcl_ scott_tiger
oeacle11g
连接上了数据库
sql2005 _com.microsoft.sqlserver.jdbc.SQLServerDriver.class_jdbc:sqlserver://localhost:1433;databaseName=newer_ sa_123
解析时间:770ms

2,SAX解析xml文档连接数据库;

package xml配置数据库连接;
import java.sql.DriverManager;
import java.util.ArrayList;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * SAX解析 1.创建解析工厂 2,创建解析工厂实例 3,工厂实例来解析XML(本地文件,文件解析器)
 * 
 * @author Administrator
 */
public class SAXDemo {
	ArrayList<ConfigSql> list;
	ConfigSql stu;
	String strValue;
	String id ;

	public static void main(String[] args) throws Exception {
		SAXDemo demo = new SAXDemo();
		demo.sefa();

	}

	public void sefa() throws Exception {
		// 开始时间
		long l1 = System.currentTimeMillis();
		// 创建工厂实例
		SAXParserFactory factory = SAXParserFactory.newInstance();
		// 创建解析工厂
		SAXParser parser = factory.newSAXParser();
		String f = "C:\\Users\\Administrator\\Desktop\\xml\\Config.xml";
		MyDefaultHandler hb = new MyDefaultHandler();
		// 解析XML
		parser.parse(f, hb);
		long l2 = System.currentTimeMillis();
		long end = l2 - l1;
		// 1818ms
		System.out.println("解析时间:" + end + "ms");
	}

	/**
	 * 创建外部类,解析XML startDocument开始读取文本 startElement开始读取元素
	 */

	 class MyDefaultHandler extends DefaultHandler {
		// 开始读取文本
		public void startDocument() throws SAXException {
			System.out.println("开始解析..");
			list = new ArrayList<ConfigSql>();
		}

		// 结束文本读取
		public void endDocument() throws SAXException {
			for(int i= 0 ;i<list.size();i++){
				ConfigSql strs= list.get(i);
//				System.out.println(sql);
//			}
//			// 遍历队列
//			for (ConfigSql strs : list) {
//				System.out.println(strs.use);
				//如果id是oracle11g就连接oracle
				if("oeacle11g".equals(strs.id)){
					System.out.println("准备连接数据库");
					try{
						//加载驱动类
						 Class.forName(strs.driver);
						//定义字符串
						 String dri =strs.url ;
						 //连接数据库
						 DriverManager.getConnection(dri, strs.use, strs.pwd);
						System.out.println("连接上了字符串");
					}catch(Exception e){
						e.printStackTrace();
					}
					
				}
				//如果id是sql2005就连接sql2005
				else if("sql2005".equals(strs.id)){
					
				}
			}
			
		}

		// 开始读取元素
		public void startElement(String uri, String localName, String qName,
				Attributes attr) throws SAXException {
			if (qName.equals("sql")) {
				stu = new ConfigSql();
				list.add(stu);
				id = attr.getValue("id");
				stu.id =id;
			}
		}

		// 结束元素的读取
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
		
			if (qName.equals("driver")) {
				stu.driver = strValue;
			}
			if (qName.equals("url")) {
				stu.url = strValue;
			}
			if (qName.equals("use")) {
				stu.use = strValue;
			}
			if (qName.equals("pwd")) {
				stu.pwd = strValue;
			}
		}

		// 读取字符串
		public void characters(char ch[], int start, int length)
				throws SAXException {
			// 创建字符串
			strValue = new String(ch, start, length);
		}

	}

}
运行结果:

 开始解析..
准备连接数据库
连接上了字符串
解析时间:815ms

 

 

1
0
分享到:
评论

相关推荐

    java解析xml文件的例子(三中方式的都有,很全)

    java解析xml文件,已连接数据库为例,我用的是oracle数据库 三种方式的例子都有 dom sax dom4j 很全的哦。。。 本人亲自写的哦

    XML_dom_sax_dom4j:XML解析技术之dom、Sax、dom4j以及XML Schema技术约束

    XML_StuGradeExam_domXML解析技术之dom、Sax、dom4j技术演习以及Schema XML文档约束##XML解析开发包Jaxp(sun)Jdomdom4j####ExamExam是一个使用Xml持久化保存数据的xml数据库,该项目是演练dom解析XML技术很好的一个...

    SAXParser-用SAX读取大于100M的xml文件(java)

    压缩包里面有两个文件:SAX.java和SAXparse.java 用来解析大于100M的xml文件,SAX读取xml不同于DOM方式,DOM方式在解析xml前需要全部加载xml文件,当xml文件很大时,就会出现内存不足的问题,而SAX则是逐行读取xml...

    xmlbean轻轻松松读写XML的利器

     Java提供了SAX和DOM两种方式用于解析XML,但即便如此,要读写一个稍微复杂的XML,也不是一件容易的事.    二、XMLBean简介    Hibernate已经成为目前流行的面向Java环境的对象/关系数据库映射工具.    在...

    JAVA编程百例+JAVA面试题集十套(经典)

    实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例70 使用JDOM解析XML 实例81 SERVLET读取COOKIE数据 实例86 JSP使用数据连接池 实例99 连接数据库 实例100 上传文件 面试题(很多企业都常常从这些面试题库中选题...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...

    XML数据提取并导入数据库

    使用JDOM的前提条件 须要有SAX、DOM解析器的类文件,JDOM只是一种适合Java程序员来使用的Java XML解析器,目前流行的Java XML...Xerces Java解析器是完全用Java编写的XML解析器,最新版本是2.5,它支持以下标准和API:

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...

    JAVA_API1.6文档(中文)

    javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 javax.xml.transform.stax 提供特定于 StAX 的转换 API。 javax.xml.transform.stream 此包实现特定于流和 URI 的转换 API。 javax.xml.validation 此...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...

    疯狂XML讲义

    其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...

    疯狂xml讲义

    其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...

    疯狂XML讲义(Web Service).pdf

    其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...

    疯狂XML讲义.part3.rar

    其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...

    JSP开发技术大全 源码

    mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...

    疯狂XML讲义 源码

    其中的DOM、SAX、JAXP、dom4i和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过X Query可以查询XML,文档中的数据,就像使用SQL查询关系数据库的数据...

    疯狂XML讲义.part1

    其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...

Global site tag (gtag.js) - Google Analytics