解析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、结果:
二、进行数据库的数据交互
数据库我用的是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
建好表 查询一下里面没有内容
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、结果
数据库的将数据展示
控制台的数据输出