解析xml文件并将文件存入数据库

  • 一、使用dom4j对xml文件进行解析
  • 1、首先要有一个xml文件
  • 2、需求
  • 3、创建Books实例类
  • 4、开始解析xml文件
  • 5、测试代码:
  • 6、结果:
  • 二、进行数据库的数据交互
  • 1、在数据库中创建一个books表
  • 2、封装数据库连接
  • 3、创建好连接后就开始编写插入数据和查询数据的代码
  • 4、测试代码:
  • 5、结果


一、使用dom4j对xml文件进行解析

首先dom4j是一个外包在使用之前需要导包

导包的方法(如果你是用的是Maven,直接在pom文件里添加依赖就好了):
在你的项目下创建一个lib文件夹把下载好的jar包复制进去,右击找到Build Path->Add to Build Path 就可以了。

做好这些我们就开始解析XML文件了。

1、首先要有一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book isbn="1">
		<name>linux</name>
		<author>王五</author>
		<price>50</price>
	</book>
	<book isbn="2">
		<name>xml</name>
		<author>lili</author>
		<price>20</price>
	</book>
	<book isbn="3">
		<name>jvm</name>
		<author>zs</author>
		<price>100</price>
	</book>
</books>

2、需求

1、输出book信息
2、book信息按照价格排序

3、创建Books实例类

通过xml文件分析,我们需要创建一个Books的实例类用来储存xml的数据

public class Books {
	private String name;
	private long id;
	private int price;
	private String autherName;
	public Books() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Books(String name, long id, int price, String autherName) {
		super();
		this.name = name;
		this.id = id;
		this.price = price;
		this.autherName = autherName;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getAutherName() {
		return autherName;
	}
	public void setAutherName(String autherName) {
		this.autherName = autherName;
	}
	@Override
	public String toString() {
		return "Books [name=" + name + ", id=" + id + ", price=" + price + ", autherName=" + autherName + "]";
	}
	
	
}

4、开始解析xml文件

import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

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

public class Dom4jTest {
	public Set<Books> analysisXML(){
		try {
			/*
			 * 根据需求要求对价格进行排序
			 * 
			 */
			Set<Books> list = new TreeSet<>(new Comparator<Books>() {

				public int compare(Books o1, Books o2) {
					if(o1.getPrice() > o2.getPrice()) {
						return 1;
					}else if(o1.getPrice() < o2.getPrice()) {
						return -1;
					}else {
						
						return 0;
					}
				}
				
			});
			
			
			SAXReader reader = new SAXReader();
			
			Document document = reader.read("src/main/resources/cont.xml");
			Element element = document.getRootElement();
			
			/*
			 * 用一个集合接收Element中的数据
			 * 方便后续操作
			 */
			List<Element> childElement = element.elements();
			for(Element element2 : childElement) {
				/*
				 * 获取标签文本内容
				 * getTestTrim()方法是返回一个String类型的数据
				 * 并且去除多余的空格
				 */
				String name = element2.element("name").getTextTrim();
				String price = element2.element("price").getTextTrim();
				String author = element2.element("author").getTextTrim();
				
				/*
				 * 获取属性
				 * <book isbn="1"><book/>
				 * 获取isbn
				 */
				String id = element2.attributeValue("isbn");
				
				/*
				 * 创建book实例对象
				 * 添加数据
				 */
				Books book = new Books();
				book.setName(name);
				book.setId(Long.parseLong(id));
				book.setPrice(Integer.parseInt(price));
				book.setAutherName(author);
				
				//将book对象添加到集合中
				list.add(book);
				
			}
			return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		
	}
}

5、测试代码:

public class ShowBook {
	public static <T> void main(String[] args) {
		Dom4jTest dom = new Dom4jTest();
		
		for (Books book : dom.analysisXML()) {
			System.out.println(book);
			
		}
		
	}
}

6、结果:

xml文件添加hive的依赖 xml文件写入数据库_java

二、进行数据库的数据交互

数据库我用的是Oracle数据库

如果你是用的不是Maven(如果你用的是maven那么你只需要在pom文件中添加依赖)就需要导包

这是数据库连接池的jar包
链接:https://pan.baidu.com/s/1DW0kM3PWq5ZzP--A4BipEQ 
提取码:n68v 
这是ojdbc8的jar包
链接:https://pan.baidu.com/s/1IBSZ3DBdchVlfxg7UQJlaw 
提取码:geqp

1、在数据库中创建一个books表

要向数据库中存入数据,就要在数据库中创建一books表

--建表语句 大小不敏感
create table Books(
name varchar2(20) not null,
id number primary key,
price varchar2(11),
authorname varchar2(200)
);
--删除表
--drop table books
--查询表中所有的消息
select * from books

建好表 查询一下里面没有内容

xml文件添加hive的依赖 xml文件写入数据库_数据库_02

2、封装数据库连接

现在我先封装一个数据库的连接

import java.sql.Connection;

import com.alibaba.druid.pool.DruidDataSource;

/*
 *这个连接我用的是数据库连接池负责分配、管理和释放数据库连接,
 *它允许应用程序重复使用一个现有的数据库连接
 */
public class OracleConnection {
	private static DruidDataSource dataSource;
	
	static {
		dataSource = new DruidDataSource();
		
		dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
		dataSource.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:XE");
		dataSource.setUsername("web");
		dataSource.setPassword("web");
		
		//数据库连接的初始连接数为3
		dataSource.setInitialSize(3);
		
		//数据库连接的最大上限为6
		dataSource.setMaxActive(6);
	}
	
	//是否需要手动提交事务
	public static Connection getConnection(boolean autoCommit) {
		Connection connection = null;
		try {
			connection = dataSource.getConnection();
			connection.setAutoCommit(autoCommit);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return connection;
		
	}
	//默认不自动提交事务
	public static Connection getConnection() {
		return getConnection(false);
	}
}

3、创建好连接后就开始编写插入数据和查询数据的代码

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

/*
 * 向数据库中添加数据的方法实现
 * 查询数据库中的数据方法的实现
 */
public class BookDao {
	public void insertDate(Books book) {
		try {
			//获取连接
			Connection connection = OracleConnection.getConnection();
			String sql = "insert into books values(?,?,?,?)";
			
			PreparedStatement pre = connection.prepareStatement(sql);
			
			//向insert语句中加入数据
			pre.setString(1, book.getName());
			pre.setLong(2, book.getId());
			pre.setInt(3, book.getPrice());
			pre.setString(4, book.getAutherName());
			
			pre.executeUpdate();
			
			//提交事务
			connection.commit();
			
			pre.close();
			connection.close();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	//从数据库中查询所有书籍
	public List<Books> selectAllBooks(){
		
		try {
			List<Books> list = new ArrayList<>();
			
			Connection connection = OracleConnection.getConnection();
			
			/*
			 * 只是简单查询一下所有数据
			 * 你可以根据你的需求修改sql语句
			 * 如果你是像我这么分开写的那么在authorname后面一定要有一个空格
			 * 否则会报没有关键字FROM的异常
			 */
			String sql = "select name,id,price,authorname "
					+ "from books";
			
			PreparedStatement pre = connection.prepareStatement(sql);
			
			ResultSet result = pre.executeQuery();
			
			/*
			 * 遍历数据
			 * 将数据存入books实例类中
			 * 再将对象添加到集合中
			 */
			while(result.next()) {
				Books book = new Books();
				book.setName(result.getString("name"));
				book.setId(result.getLong("id"));
				book.setPrice(result.getInt("price"));
				book.setAutherName(result.getString("authorname"));
				
				list.add(book);
				
			}
			return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}

4、测试代码:

public class ShowBook {
	public static void main(String[] args) {
		BookDao dao = new BookDao();
		Dom4jTest dom = new Dom4jTest();
		
		//向数据库中存入数据
		for (Books book : dom.analysisXML()) {
			dao.insertDate(book);
			
		}
		
		//读取数据库中的数据
		for (Books b : dao.selectAllBooks()) {
			System.out.println(b);
		}
	}
}

5、结果

数据库的将数据展示

xml文件添加hive的依赖 xml文件写入数据库_jdbc_03


控制台的数据输出

xml文件添加hive的依赖 xml文件写入数据库_xml文件添加hive的依赖_04