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

java解析xml文档并保存到数据库java解析xml文档并保存到数据库:sadf说明:用xml文档简单写一份新闻如下:洛阳未来一周将持续高温天气中国气象局洛阳未来一周将持续高温天气,局部地区温度高达39度!请大家做好防范高温,谨防中暑!河南科技大学跻身世界顶尖大学中国教育网据权威机构综合测评之后,河南科技大学全世界排名超前,成功跻身世界顶尖大学!洛阳牡丹甲天下中国旅游网洛阳牡丹甲不是

大家好,又见面了,我是你们的朋友全栈君。

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

sadf

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

java解析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>

设计数据库:

如图:

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

代码功能实现设计:

框架:

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

说明: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 block
			e.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 block
					e.printStackTrace();
				}
    }
    
    public void close(){
    try {
    	if(rs!=null){
    		rs.close();
    		ps.close();
			conn.close();
    	}
    } catch (Exception e) {
				// TODO Auto-generated catch block
				e.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 block
					e.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 block
			e.printStackTrace();
		}
    	return rs;
    }

}

database1.properties文件:

#database name
DBName=newsxml
#database localhost
DBHost=127.0.0.1
#database username
DBUser=root
#database password
DBPwd=root
#database number of port
Port=3306
#database type 1-mysql,2-sqlserver
DBType=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 block
				e.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 {

	@Override
	public 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说明已经成功添加数据库。

数据库数据如图:

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

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

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139702.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm中安装模块_pycharm本地安装第三方模块

    pycharm中安装模块_pycharm本地安装第三方模块1.打开pycharm,点击File,再点击settings2.点击settings之后再点击project下面的projectInterpreter将会出现如下界面:3.点击“+”号,搜索并安装相应的模块转载于:https://www.cnblogs.com/mrruning/p/7624844.html…

    2022年8月28日
    2
  • kotlin的Map集合

    kotlin的Map集合kotlin的Map集合只读Map可变的MapmutableMapOfkotlin的Map分为:只读Map。可变的MutableMap(MutableMap、HashMap、LinkedHashMap)。只读Map意味着我们创建出来的map是不可变的,即我们只能使用无法改变我们map中的数据,我们只能获取集合中的数据而无法对集合中的数据进行新增和修改。/***…

    2022年5月18日
    34
  • docker的端口映射_外网远程桌面端口映射

    docker的端口映射_外网远程桌面端口映射Docker端口映射实现网络访问首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!我会在当天或者第二天及时回复,并且改进~~Docker运行容器之后却发现没IP,没端口,那要如何访问容器呢?下面我来介绍下Docker通过端口映射来实现网络访问一、从外部访问容器应用在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数指定端口映射。先来说说p和P吧-p可以指定要映射的端口,并

    2022年10月9日
    0
  • TinyXML介绍「建议收藏」

    TinyXML介绍「建议收藏」http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Wind

    2022年5月3日
    47
  • vim命令复制粘贴命令_linux编辑文件命令vim

    vim命令复制粘贴命令_linux编辑文件命令vim今天被vim的复制粘贴弄得很烦,它不像windows那样,每次复制会把以前的内容覆盖。所以有时粘贴出来的东西并不是你想要的。在不同终端中,用vim打开的两个文件之间的复制粘贴1.用同一个终端,直接使用这个命令:vimfile1file2这样就可以直接用y和p复制粘贴了。但是这样比较麻烦,需要在两个文件之间切换。2.之所以不能直接用y和p复制粘贴。是因为每个终端中的vim复制的内容存储在不同…

    2022年9月22日
    0
  • Server.MapPath用法

    Server.MapPath用法Server.MapPath的使用方法了,下面记录一下,以备后用:总注:Server.MapPath获得的路径都是服务器上的物理路径,也就是常说的绝对路径1、Server.MapPath(“/”)注:获得应用程序根目录所在的位置,如C:\Inetpub\wwwroot\。2、Server.MapPath(“./”)注:获得所在页面的当前目录,等价于Server.MapPath(“”)。3、Ser…

    2022年7月13日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号