数据准备:
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();
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------