现在的位置: 首页 > 综合 > 正文

xml解析得到数据并将其插入数据库(dom4j非Xpath方式)

2013年07月13日 ⁄ 综合 ⁄ 共 9049字 ⁄ 字号 评论关闭

数据准备:

Sys-Config.xml

----------------------------------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config SYSTEM "Sys-Config.dtd">
<config>
    <db>
       <db-name>com.mysql.jdbc.Driver</db-name>
       <db-connstring>jdbc:mysql://127.0.0.1:3306/student</db-connstring>
       <username>root</username>
       <password>centre</password>
    </db>  
</config>

----------------------------------------------------------------------------------------------------------------------------------------------------

Sys-Config.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT config (db)>
       <!ELEMENT db (db-name,db-connstring,username,password)>
             <!ELEMENT db-name (#PCDATA)>
             <!ELEMENT db-connstring (#PCDATA)>
             <!ELEMENT username (#PCDATA)>
             <!ELEMENT password (#PCDATA)>

----------------------------------------------------------------------------------------------------------------------------------------------------

student.xml

<?xml version="1.0" encoding="UTF-8"?>
<school>
     <class name="030713">
        <student>
           <stuid>03071300</stuid>
           <stuname>小明</stuname>
           <stusex>男</stusex>
           <stuage>10</stuage>
        </student>
        <student>
           <stuid>03071301</stuid>
           <stuname>小花</stuname>
           <stusex>女</stusex>
           <stuage>20</stuage>
        </student>
        <student>
           <stuid>03071302</stuid>
           <stuname>不知道</stuname>
           <stusex>男</stusex>
           <stuage>15</stuage>
        </student>       
     </class>
     <class name="030714">
        <student>
           <stuid>03071400</stuid>
           <stuname>小明</stuname>
           <stusex>男</stusex>
           <stuage>10</stuage>
        </student>
        <student>
           <stuid>03071401</stuid>
           <stuname>小花</stuname>
           <stusex>女</stusex>
           <stuage>20</stuage>
        </student>
        <student>
           <stuid>03071402</stuid>
           <stuname>不知道</stuname>
           <stusex>男</stusex>
           <stuage>15</stuage>
        </student>       
     </class>    
</school>

----------------------------------------------------------------------------------------------------------------------------------------------------

数据库(mysql)脚本:

student.sql

create database student;

create table studentinfo(
stuid bigint primary key auto_increment,
stuname varchar(10) not null,
stusex varchar(2) check (stusex in ('男','女')),
stuage int check (stuage between 0 and 100)
);

create table class(
claid bigint,
stuid bigint,
foreign key (stuid) references studentinfo(stuid)
);

----------------------------------------------------------------------------------------------------------------------------------------------------

解析数据库配置文件Sys-Config.xml:

ReadSysConfig.java

package com.xie.conndb;

import java.io.File;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

 

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

//dom4j读取Sys-Config配置文件
public class ReadSysConfig {
 private String dbName;
 private String dbString;
 private String username;
 private String password;
 private List<String> al;
/**
 * 得到Sys-Config.xml中的相关配置信息
 * @author centre
 * @return List<String> 存放着从配置文件得到的配置信息
 */
 public  List<String> getConnProperties() {
    long lasting = System.currentTimeMillis();

    try {

        File f = new File("D://project//XmlParse//xmlFiles//Sys-Config.xml");

        SAXReader reader = new SAXReader();

        Document doc = reader.read(f);

        Element root = doc.getRootElement();
        System.out.println("root:"+root);

        Element ele;
        al=new ArrayList<String>();
        //这个for循环的可扩展性不行
        for (Iterator<Element> i =root.elementIterator("db"); i.hasNext();) {
          
           ele = i.next();
           dbName=ele.elementText("db-name");
           al.add(dbName);
           dbString=ele.elementText("db-connstring");
           al.add(dbString);
           username=ele.elementText("username");
           al.add(username);
           password=ele.elementText("password");
           al.add(password);

        }
    } catch (Exception e) {

        e.printStackTrace();

    }

    System.out.println("运行时间:"+ (System.currentTimeMillis() - lasting)+" 毫秒");
    return al;
 }
}

返回一个Connection连接:

ConnDb.java

package com.xie.conndb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

//读取xml配置,然后连接数据库,返回一个连接
public class ConnDb {
    private Connection ct;
    /**
     * 返回一个连接到student数据库的连接
     * @author centre
     * @return Connection
     */
    public Connection getConnStu(){
     ReadSysConfig rsc=new ReadSysConfig();
     String[] sql=new String[4];
     List<String> al=rsc.getConnProperties();
     for (int i = 0; i < al.size(); i++) {
   sql[i]=al.get(i);
  }
        try {
   Class.forName(sql[0]);
   ct=DriverManager.getConnection(sql[1],sql[2],sql[3]);
  } catch (ClassNotFoundException e) {
   System.out.println("驱动类为找到。");
   e.printStackTrace();
  } catch (SQLException e) {
   System.out.println("ConnDb sql 异常。");
   e.printStackTrace();
  }
       
     return ct;
    }
}

 

----------------------------------------------------------------------------------------------------------------------------------------------------

student的数据接收模型:

Student.java

package com.xie.xmlparse.dom4j.modal;

public class Student {
       private Long classId;
       private Long stuId;
       private String stuName;
       private String stuSex;
       private int stuAge;
 public Long getClassId() {
  return classId;
 }
 public void setClassId(Long classId) {
  this.classId = classId;
 }
 public Long getStuId() {
  return stuId;
 }
 public void setStuId(Long stuId) {
  this.stuId = stuId;
 }
 public String getStuName() {
  return stuName;
 }
 public void setStuName(String stuName) {
  this.stuName = stuName;
 }
 public String getStuSex() {
  return stuSex;
 }
 public void setStuSex(String stuSex) {
  this.stuSex = stuSex;
 }
 public int getStuAge() {
  return stuAge;
 }
 public void setStuAge(int stuAge) {
  this.stuAge = stuAge;
 }
      
      
}

----------------------------------------------------------------------------------------------------------------------------------------------------

解析Student.xml:

ParseXml.java

package com.xie.xmlparse.dom4j;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.xie.xmlparse.dom4j.modal.Student;

//将xml中的数据读出
public class ParseXml {
 private List<Student> al=null;
 
     public List<Student> getAl() {
  return getXmlDate();
 }
     /**
      * 解析student.xml文件,将其数据放入student中,然后加入list
      * @return List<Student> 返回一个装有student的容器。
      */
 public List<Student> getXmlDate(){

      try {
          File f=new File("D://project//XmlParse//xmlFiles//student.xml");
          SAXReader reader=new SAXReader();
    Document doc=reader.read(f);
    Element root=doc.getRootElement();
    al=new ArrayList<Student>();
    //System.out.println("root:"+root);
    //System.out.println(root.elementText("class"));
    Element ele;
    Element ele1;
   for (Iterator<Element> i=root.elementIterator("class");i.hasNext();) {
    ele=i.next();
    for (Iterator<Element> it=ele.elementIterator();it.hasNext();) {
     Student s=new Student();
     s.setClassId(Long.parseLong(ele.attributeValue("name")));
     ele1=it.next();
     s.setStuId(Long.parseLong(ele1.elementText("stuid")));
     s.setStuName(ele1.elementText("stuname"));
     s.setStuSex(ele1.elementText("stusex"));
     s.setStuAge(Integer.parseInt(ele1.elementText("stuage")));
     al.add(s);
    }    
   }   
  } catch (DocumentException e) {
   System.out.println("ParseXml文档异常。");
   e.printStackTrace();
  }
     return al;
     }
}

----------------------------------------------------------------------------------------------------------------------------------------------------

将数据插入到mysql:

InsertMysqlXmlData.java

package com.xie.xmlparse.dom4j;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import com.xie.conndb.ConnDb;
import com.xie.xmlparse.dom4j.modal.Student;

//将读到的数据写入mysql数据库中
public class InsertMysqlXmlData {
 private Connection ct=null;
 private PreparedStatement ps=null;
 private PreparedStatement ps1=null;

 private List<Student> al=null;
 /**
  * 将数据写入数据库
  * @return boolean  必要的时候可以用变量接收该值
  */
    public boolean insertToMysql(){
     boolean b=true;
     
        try {
         ct=new ConnDb().getConnStu();
   ps=ct.prepareStatement("insert into studentinfo values(?,?,?,?)");
   ps1=ct.prepareStatement("insert into class values(?,?)");
   al=new ParseXml().getAl();
   Student s=null;
   for (int i = 0; i < al.size(); i++) {
    s=al.get(i);
    ps.setLong(1, s.getStuId());
    ps.setString(2, s.getStuName());
    ps.setString(3,s.getStuSex());
    ps.setInt(4, s.getStuAge());
    ps.addBatch();
    ps1.setLong(1, s.getClassId());
    ps1.setLong(2, s.getStuId());
    ps1.addBatch();
    System.out.println("no"+s.getStuId());
    
   }
   ps.executeBatch();
   ps1.executeBatch();
  } catch (SQLException e) {
   System.out.println("insertMysqlXmlData失败。");
   b=false;
   e.printStackTrace();
  }
     
     return b;
    }
    public static void main(String[] args){
     new InsertMysqlXmlData().insertToMysql();
    }
}

----------------------------------------------------------------------------------------------------------------------------------------------------

抱歉!评论已关闭.