java解析xml文档并保存到数据库

来源:互联网 发布:异次元的软件世界 编辑:程序博客网 时间:2024/05/17 17:56

java解析xml文档并保存到数据库:

sadf

说明:用xml文档简单写一份新闻如下:


<root><news><title>洛阳未来一周将持续高温天气</title><author>中国气象局</author><content>洛阳未来一周将持续高温天气,局部地区温度高达39度!请大家做好防范高温,谨防中暑!</content></news><news><title>河南科技大学跻身世界顶尖大学</title><author>中国教育网</author><content>据权威机构综合测评之后,河南科技大学全世界排名超前,成功跻身世界顶尖大学!</content></news><news><title>洛阳牡丹甲天下</title><author>中国旅游网</author><content>洛阳牡丹甲不是吹牛逼的!不信你看!</content></news></root>

设计数据库:

如图:


代码功能实现设计:

框架:


说明:dom4j-jar包和数据库连接jar包自行到官网下载

BaseDao结合database1.properties文件使用:

package com.hkd.base;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;public class BaseDao {String DBUser;//用户名    String DBHost;//地址    String DBPwd;//密码    String DBName;//数据库名    int Port;//端口    int DBType;//数据库类型:1-mysql ,2-sqlserver        Connection conn;//创建连接对象    PreparedStatement ps;//创建查询对象    public ResultSet rs;//创建结果集        public BaseDao(){    Properties pro = new Properties();    InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("database1.properties");      try {pro.load(is);DBUser=pro.getProperty("DBUser");DBHost=pro.getProperty("DBHost");DBPwd=pro.getProperty("DBPwd");DBName=pro.getProperty("DBName");Port=Integer.parseInt(pro.getProperty("Port"));DBType=Integer.parseInt(pro.getProperty("DBType"));pro.clear();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }        public void open(){    try {    if(DBType==1){        Class.forName("com.mysql.jdbc.Driver");        conn=DriverManager.getConnection("jdbc:mysql://"+DBHost+":"+Port+"/"+DBName, DBUser, DBPwd);        }else if(DBType==2){        Class.forName("com.microsoft.sqlserver.sqlserverDriver");        conn=DriverManager.getConnection("jdbc:sqlserver://"+DBHost+":"+Port+";database="+DBName, DBUser, DBPwd);        }    } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}    }        public void close(){    try {    if(rs!=null){    rs.close();    ps.close();conn.close();    }    } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}    }        public int excuteUpdate(String sql,Object...parm){    open();    int a=0;        try {    ps=conn.prepareStatement(sql);       if(parm!=null){      for(int i=0;i<parm.length;i++){ps.setObject(i+1, parm[i]);      }       }       a=ps.executeUpdate();       close();        } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}        return a;    }        public ResultSet excuteQuery(String sql,Object [] parm){    open();        try {   ps=conn.prepareStatement(sql);       if(parm!=null){      for(int i=0;i<parm.length;i++){    ps.setObject(i+1, parm[i]);      }       }       rs=ps.executeQuery();    } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}    return rs;    }}

database1.properties文件:

#database nameDBName=newsxml#database localhostDBHost=127.0.0.1#database usernameDBUser=root#database passwordDBPwd=root#database number of portPort=3306#database type 1-mysql,2-sqlserverDBType=1

新闻类:News

package com.hkd.entity;public class News {String title;String author;String content;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}

NewsDao接口:

package com.hkd.service;import com.hkd.entity.News;public interface NewsDao {int add(News n);}

XmlService类:

package com.hkd.service;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.hkd.entity.News;public class XmlService {public List<News> getNews(String path){//解析    SAXReader reader = new SAXReader();            List<News> listnode = new ArrayList<News>();try {    Document doc = reader.read(path);Element  root=doc.getRootElement();//获取根节点    System.out.println(root.getName());//打印根节点root    List<Element> list = root.elements();//所有root下第一子节点存进一个集合中    //遍历节点    for (Element e : list) {    News n = new News();//放在循环里面,循环完一个后接着下一个System.out.println(e.getName());//获取根结点下第一根子节点n.setTitle(e.elementText("title"));n.setAuthor(e.elementText("author"));n.setContent(e.elementText("content"));listnode.add(n);}    } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return listnode;}}

实现类NewsDaoImpl:

package com.hkd.serviceimpl;import com.hkd.base.BaseDao;import com.hkd.entity.News;import com.hkd.service.NewsDao;public class NewsDaoImpl extends BaseDao implements NewsDao {@Overridepublic int add(News n) {String sql = "insert into news values(null,?,?,?)";Object[] parm = {n.getTitle(),n.getAuthor(),n.getContent()};int a = excuteUpdate(sql, parm);return a;}      }
入口类:Main

package com.hkd.main;import java.util.List;import com.hkd.entity.News;import com.hkd.service.NewsDao;import com.hkd.service.XmlService;import com.hkd.serviceimpl.NewsDaoImpl;public class Main {/** * @param args */public static void main(String[] args) {XmlService xs = new XmlService();NewsDao nd = new NewsDaoImpl();List<News> list = xs.getNews("E:\\AA\\news.xml");int a=0;for (News news : list) {a+= nd.add(news);}if(a==3){System.out.println("sucess");}else{System.out.println("error");}}}
控制台输出:

root
news
news
news
sucess

说明:第一个root说明输出了xml文档中的根节点root(根节点只有一个)

接着三个news是root的单个第一子节点

最后一个sucess是在main方法中判断是否成功添加数据库。

sucess说明已经成功添加数据库。

数据库数据如图:


再次执行入口类,重新添加一次数据库数据更新为:



原创粉丝点击