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

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 并导入数据库(dom4j )

    总的来说,DOM4J为Java开发者提供了一个强大且易于使用的工具来解析XML,而JDBC则使得与数据库的交互变得简单。通过两者结合,我们可以高效地完成从XML到数据库的数据迁移任务。在进行此类操作时,需要注意性能优化...

    XML配置文件连接Oracle数据库

    5. **解析XML配置**:在应用程序中,你需要使用Java的DOM或SAX解析器来读取和解析XML配置文件。获取到连接信息后,可以使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。 6. **建立数据库...

    XML解析和数据库连接池

    例如,可以将XML文件作为数据源,通过解析XML获取数据,然后通过JDBC和连接池将这些数据存入数据库。同时,也可以将数据库中的数据导出为XML文件,方便数据交换和备份。 上传的"upload.ppt"可能包含关于XML解析、...

    java 解析xml类映射数据库 数据库操作 反射机制 源码

    本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...

    XML基于BS连接数据库的java代码 XML与数据库转换

    反之,从XML到数据库的转换则需要解析XML文件,提取数据,然后插入或更新到数据库中。 例如,使用DOM解析器,我们可以创建一个`DocumentBuilderFactory`实例,然后用`newDocumentBuilder()`方法生成`...

    java txt文件解析xml格式添加到数据库

    1. 使用SAX解析XML: SAX是一个事件驱动的解析器,它在读取XML文件时触发事件,例如开始元素、结束元素等。以下是一个简单的SAX解析器示例: ```java import org.xml.sax.Attributes; import org.xml.sax....

    Java 解析xml 存入mongodb 返回org.json json包

    本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...

    Servlet利用SAX解析XML文档

    6. **配置和启动解析**:在Servlet的请求处理方法中,设置ContentHandler到SAXParser,并调用`parse()`方法开始解析XML。例如: ```java InputSource inputSource = new InputSource(new StringReader(xmlData)); ...

    使用Java读取XML配置文件

    使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 ...使用 XML 作为 Java 程序的配置文件可以提高系统的灵活性和可维护性,而使用 SAX 解析器可以高效地读取 XML 文件。

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

    本示例提供了三种不同的方法来解析XML文件,并结合了数据库连接,特别是使用Oracle数据库。下面将详细介绍DOM、SAX和DOM4J这三种解析器的工作原理以及如何在Java中实现它们。 1. DOM(文档对象模型)解析: DOM是一...

    Java实现XML导入不同数据库,从数据库导出数据到XML

    Java作为一种强大的编程语言,提供了多种API来处理XML,如JDOM、DOM4J、SAX和StAX等。本教程将重点讨论如何使用Java的JDOM库实现XML数据的导入和导出,并结合Ajax技术与不同的数据库进行交互。 首先,让我们深入...

    java实现xml解析word文档代码实现

    document.xml 文件是基于 XML 格式的,可以使用 Java 中的 DOM 或 SAX 解析器来解析该文件。 3. 书签的 XML 结构 在 Word 文档中,书签是使用 `&lt;w:bookmarkStart&gt;` 和 `&lt;w:bookmarkEnd&gt;` 标签来表示的,其中 `...

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

    4. **XML与数据库的交互**:在导入XML到数据库时,首先需要解析XML文件,然后创建相应的SQL INSERT语句,通过JDBC执行这些语句。导出时,从数据库查询数据,生成XML文档,可以用DOM或StAX来实现。 5. **数据库操作*...

    JAVA调用webservice并解析xml

    总结,调用Java中的Web服务并解析XML涉及到了Web服务的基础概念、Java的Web服务客户端创建、XML解析技术以及实际的调用与响应处理。熟练掌握这些知识点,能够帮助开发者有效地集成和利用各种Web服务资源。

    java解释Xml,从数据库中读出来,解释Xml

    2. **Java解析XML的API** - **DOM(Document Object Model)**:DOM是基于树形结构的API,它将整个XML文档加载到内存中形成一个节点树。通过遍历这个树,可以访问和修改XML的任何部分。DOM适合小型XML文档,因为...

    xml.rar_XML java_java xml_xml_xml 数据库

    这可能使用到了Java的DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来构建或读取XML结构。 2. **Java数据库连接(JDBC)**:为了从数据库中获取数据,开发者...

    java数据库xml驱动

    相反,当需要将XML数据导入数据库时,可以使用DOM4J解析XML文件,Jaxen处理XPath表达式,最后通过JDBC将数据写入相应的表中。 在实际开发中,为了确保XML驱动的效率和灵活性,开发者需要注意以下几点: - 选择合适...

Global site tag (gtag.js) - Google Analytics