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
相关推荐
总的来说,DOM4J为Java开发者提供了一个强大且易于使用的工具来解析XML,而JDBC则使得与数据库的交互变得简单。通过两者结合,我们可以高效地完成从XML到数据库的数据迁移任务。在进行此类操作时,需要注意性能优化...
5. **解析XML配置**:在应用程序中,你需要使用Java的DOM或SAX解析器来读取和解析XML配置文件。获取到连接信息后,可以使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。 6. **建立数据库...
例如,可以将XML文件作为数据源,通过解析XML获取数据,然后通过JDBC和连接池将这些数据存入数据库。同时,也可以将数据库中的数据导出为XML文件,方便数据交换和备份。 上传的"upload.ppt"可能包含关于XML解析、...
本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...
本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...
反之,从XML到数据库的转换则需要解析XML文件,提取数据,然后插入或更新到数据库中。 例如,使用DOM解析器,我们可以创建一个`DocumentBuilderFactory`实例,然后用`newDocumentBuilder()`方法生成`...
1. 使用SAX解析XML: SAX是一个事件驱动的解析器,它在读取XML文件时触发事件,例如开始元素、结束元素等。以下是一个简单的SAX解析器示例: ```java import org.xml.sax.Attributes; import org.xml.sax....
本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...
6. **配置和启动解析**:在Servlet的请求处理方法中,设置ContentHandler到SAXParser,并调用`parse()`方法开始解析XML。例如: ```java InputSource inputSource = new InputSource(new StringReader(xmlData)); ...
使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 ...使用 XML 作为 Java 程序的配置文件可以提高系统的灵活性和可维护性,而使用 SAX 解析器可以高效地读取 XML 文件。
本示例提供了三种不同的方法来解析XML文件,并结合了数据库连接,特别是使用Oracle数据库。下面将详细介绍DOM、SAX和DOM4J这三种解析器的工作原理以及如何在Java中实现它们。 1. DOM(文档对象模型)解析: DOM是一...
Java作为一种强大的编程语言,提供了多种API来处理XML,如JDOM、DOM4J、SAX和StAX等。本教程将重点讨论如何使用Java的JDOM库实现XML数据的导入和导出,并结合Ajax技术与不同的数据库进行交互。 首先,让我们深入...
document.xml 文件是基于 XML 格式的,可以使用 Java 中的 DOM 或 SAX 解析器来解析该文件。 3. 书签的 XML 结构 在 Word 文档中,书签是使用 `<w:bookmarkStart>` 和 `<w:bookmarkEnd>` 标签来表示的,其中 `...
4. **XML与数据库的交互**:在导入XML到数据库时,首先需要解析XML文件,然后创建相应的SQL INSERT语句,通过JDBC执行这些语句。导出时,从数据库查询数据,生成XML文档,可以用DOM或StAX来实现。 5. **数据库操作*...
总结,调用Java中的Web服务并解析XML涉及到了Web服务的基础概念、Java的Web服务客户端创建、XML解析技术以及实际的调用与响应处理。熟练掌握这些知识点,能够帮助开发者有效地集成和利用各种Web服务资源。
2. **Java解析XML的API** - **DOM(Document Object Model)**:DOM是基于树形结构的API,它将整个XML文档加载到内存中形成一个节点树。通过遍历这个树,可以访问和修改XML的任何部分。DOM适合小型XML文档,因为...
这可能使用到了Java的DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来构建或读取XML结构。 2. **Java数据库连接(JDBC)**:为了从数据库中获取数据,开发者...
相反,当需要将XML数据导入数据库时,可以使用DOM4J解析XML文件,Jaxen处理XPath表达式,最后通过JDBC将数据写入相应的表中。 在实际开发中,为了确保XML驱动的效率和灵活性,开发者需要注意以下几点: - 选择合适...