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
相关推荐
java解析xml文件,已连接数据库为例,我用的是oracle数据库 三种方式的例子都有 dom sax dom4j 很全的哦。。。 本人亲自写的哦
XML_StuGradeExam_domXML解析技术之dom、Sax、dom4j技术演习以及Schema XML文档约束##XML解析开发包Jaxp(sun)Jdomdom4j####ExamExam是一个使用Xml持久化保存数据的xml数据库,该项目是演练dom解析XML技术很好的一个...
压缩包里面有两个文件:SAX.java和SAXparse.java 用来解析大于100M的xml文件,SAX读取xml不同于DOM方式,DOM方式在解析xml前需要全部加载xml文件,当xml文件很大时,就会出现内存不足的问题,而SAX则是逐行读取xml...
Java提供了SAX和DOM两种方式用于解析XML,但即便如此,要读写一个稍微复杂的XML,也不是一件容易的事. 二、XMLBean简介 Hibernate已经成为目前流行的面向Java环境的对象/关系数据库映射工具. 在...
实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例70 使用JDOM解析XML 实例81 SERVLET读取COOKIE数据 实例86 JSP使用数据连接池 实例99 连接数据库 实例100 上传文件 面试题(很多企业都常常从这些面试题库中选题...
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 ...
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 ...
使用JDOM的前提条件 须要有SAX、DOM解析器的类文件,JDOM只是一种适合Java程序员来使用的Java XML解析器,目前流行的Java XML...Xerces Java解析器是完全用Java编写的XML解析器,最新版本是2.5,它支持以下标准和API:
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 ...
javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 javax.xml.transform.stax 提供特定于 StAX 的转换 API。 javax.xml.transform.stream 此包实现特定于流和 URI 的转换 API。 javax.xml.validation 此...
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 ...
其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...
其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...
其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...
其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
其中的DOM、SAX、JAXP、dom4i和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过X Query可以查询XML,文档中的数据,就像使用SQL查询关系数据库的数据...
其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery可以查询XML文档中的数据,就像使用SQL查询关系数据库的数据一样...