java从XML中读取数据源配置

    技术2022-05-18  12

    1、使用java.util.*中的Properties类读取文件     

    工程布局如图

    其中conf.txt和conf.xml为配置文件.内容如

    conf.txt文件内容:

    serverport=8899 dbip=127.0.0.1 dbport = 1433

    conf.xml文件内容:其中格式必须符合些规范

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Hi</comment> <entry key="name">liming</entry> <entry key="password">123456</entry> </properties>

    主要读取类为Conf.java

    public class Conf { private Properties propertie; private FileInputStream inputFile; public static void main(String[] args) { //Conf conf=new Conf("src"+File.separator+"conf.txt");//若文件在src目录下 Conf conf=new Conf("property"+File.separator+"conf.xml");//若在根目录的property文件中 System.out.println(conf.getValue("password")); } public Conf(String filePath){ propertie = new Properties(); try{ inputFile = new FileInputStream(filePath); propertie.load(inputFile); //propertie.loadFromXML(inputFile);读取XML文件 inputFile.close(); } catch (FileNotFoundException ex){ System.out.println("文件无法找到."); ex.printStackTrace(); } catch (IOException ex) { System.out.println("读取文件失败"); ex.printStackTrace(); } } public String getValue(String key) { if(propertie.containsKey(key)){ String value = propertie.getProperty(key); return value; } else return null; } }(2)使用dom4j读取XML文件

    dom4j一个JavaXML API,同时也是一种解析XML文档的开源软件。由dom4j.org开发,具有性能优异、功能强大和极端易用的特点,大名鼎鼎的Hibernate就是用它来读取配置文件滴。本文只是对dom4j的一些基本操作进行说明,不包含深入分析。(本文最后有源码和相关JAR包下载)     开发环境:Eclipse 3.2.1 MyEclipse 5.1.0GA dom4j-1.6.1.jar jaxen-1.1-beta-7.jar     1、创建Web Project        Web Project来演示的原因一是因为WEB-INF目录下有一个lib目录,例子中需要用到的jar包,直接放进去就行了,二是这个系列后面讲的内容会需要。如果建Java Project则还要设置库路径,为了方便,就用Web Project吧。点击"File"->"New"->"Project",选择"Web Project",在"Project Name"中输入demo,点击"Finish"。然后我们把dom4j-1.6.1.jarjaxen-1.1-beta-7.jar还有MySQL的连接驱动放到WEB-INF/lib目录下。     2、创建DBConnect.xml        src目录下建一个DBConnect.xml文件,内容如下:

    <? xml version="1.0" encoding="UTF-8" ?> < demo >      < database >          < driver > com.mysql.jdbc.Driver </ driver >          < url > jdbc:mysql://127.0.0.1:3306/mysql </ url >          < username > root </ username >          < password > 123 </ password >      </ database > </ demo >

           大象在这里用MySQL的数据库,当然你也可以换成SQL Server或是Oracle,不过XML文件中对应的配置都要作相应的改动!     3、创建DataBaseConnect.java        在src上点右键,选择"New->Package",输入:com.demo.database,在database下新建一个类,类名为:DataBaseConnect下面我们先写一段简单的代码,测试一下,看看能否从这个XML文件中读取到配置信息。在DataBaseConnect类中加入main函数,然后写上如下代码:

        public   static   void  main(String[] args){          try {             SAXReader saxReader  =   new  SAXReader();  // 使用SAXReader方式读取XML文件             //加载数据库XML配置文件,得到Document对象             Document document  =  saxReader.read( new  File( " src/DBConnect.xml " ));              Element root  =  document.getRootElement();  // 获得根节点             //得到database节点             Element database  =  (Element)root.selectSingleNode( " //demo/database " );              List list  =  database.elements();  // 得到database元素下的子元素集合              /*              * 循环遍历集合中的每一个元素              * 将每一个元素的元素名和值在控制台中打印出来               */              for (Object obj:list){                 Element element  =  (Element)obj;                  // getName()是元素名,getText()是元素值                 System.out.println(element.getName() + " " + element.getText());             }         } catch (Exception e){             e.printStackTrace();         }     }

           这里有三点要说明一下:          a、saxReader.read(new File("src/DBConnect.xml")),这个read方法是一个重载的方法,里面的参数可以为FileFileInputStreamURL等。所以这里还可以写成new FileInputStream ("src/DBConnect.xml"),另外还可以用ClassLoader来加载:getClass().getClassLoader().getResourceAsStream("DBConnect.xml"),注意,这里不能加"src/",因为它是在WEB-INF/classes里面找文件,另外不能写在静态的main函数里,可以在main方法外,创建一方法,在main中通过实例化类对象来调用,这里不再详述,大家自己去试下。          b、root.selectSingleNode("//demo/database"),这里的"//demo/database"其实是一个XPATH语法,关于XPATH请参考相关资料,这里不作讨论。这样写的意思是指:demo根节点下的database节点,"selectSingleNode"是得到database这个单独的元素,至于database下面是否还包含别的信息,则是通过其它的API来操作。           c、如果你在使用XPATH语法的时候没有加入jaxen-1.1-beta-7.jar这个包,就会出现如下异常:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException     at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)     at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)     at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)     at com.demo.database.DataBaseConnect.main(DataBaseConnect.java:16)

           如果没有问题的话,应该可以在控制台看到下面的结果:

    driver: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/mysql username: root password:  123

           到此,我们已经成功使用dom4jXML中读取文件,下面我们对DataBaseConnect作一下修改,毕竟上面这种写法是测试用的,真正的类怎么可能这样写?  

           如果没问题,控制台将打印出:381的结果。        这里附上DBConnect.xml中SQL Server 2000和Oracle的配置,其中SQL Server采用JTDS驱动。

    <? xml version="1.0" encoding="UTF-8" ?> < demo >      < database >          < driver > net.sourceforge.jtds.jdbc.Driver </ driver >          < url > jdbc:jtds:sqlserver://127.0.0.1:1433/pubs </ url >          < username > sa </ username >          < password >自己密码(无密码就空着)</ password >      </ database > </ demo >

     

    <? xml version="1.0" encoding="UTF-8" ?> < demo >      < database >          < driver > oracle.jdbc.driver.OracleDriver </ driver >          < url > jdbc:oracle:thin:@127.0.0.1:1521:自己的SID </ url >          < username > system </ username >          < password > 自己密码(无密码就空着) </ password >      </ database > </ demo >

     


    最新回复(0)