大家好,又见面了,我是你们的朋友全栈君。
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 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说明已经成功添加数据库。
数据库数据如图:
再次执行入口类,重新添加一次数据库数据更新为:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139702.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...