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

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

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

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

链接:https://pan.baidu.com/s/1SNg292iRf_dtJeYdzcx2zw
提取码:w6gq

导包的方法(如果你是用的是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;}@Overridepublic 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 blocke.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");//数据库连接的初始连接数为3dataSource.setInitialSize(3);//数据库连接的最大上限为6dataSource.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 blocke.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 blocke.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 blocke.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文件并将数据存入数据库相关推荐

  1. 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  2. python读取xml标注坐标_遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件...

    XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...

  3. Android向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...

  4. SOS强力求助—如何上传一个xml文件到一个服务器,并且得到服务器返回的数据。-已解...

    大家好!我想把一个本地的一个xml文件上传的指定的服务器上,并且取得服务器返回给我的数据.我用一个很简单的界面,就是一个按钮和一个textview.当我点击按钮时,开始发送我的xml文件到服务器,我们 ...

  5. xml的学习和使用python解析读取xml文件

    1. XML的介绍 XML 指可扩展标记语言(EXtensible Markup Language). 和json类似也是用于存储和传输数据,还可以用作配置文件. 类似于HTML超文本标记语言,但是H ...

  6. 利用dom4j取出XML文件中的数据

    在我们做项目的时候会经常用到XML文件用来配置系统,XML让系统更加的具有了灵活性,Java如何从XML中取出我们想要的数据呢?下面是我利用DOM4J来实现取出XML文件中的数据. XML文件: &l ...

  7. 定义一个xml文件,保存班级信息

    xml文件的功能:用来传输和存储数据 案例: 编写一个xml文件,用来存储班级的信息,包括学生(姓名,年龄,城市,手机号).老师(姓名,课程).账号信息(账号.密码) 说明: 做文档声明,声明文档类型 ...

  8. xml引入另一个xml文件_什么是XML文件(以及如何打开一个XML文件)?

    xml引入另一个xml文件 A file with the .xml file extension is an Extensible Markup Language (XML) file. These ...

  9. PMS解析AndroidManifest.xml文件的过程

    一.前言 ​      前段时间在看当下主流的安卓插件化技术原理的时候,发现目前插件化技术对于四大组件的处理基本都是通过代理来实现的(动态注册的广播接收器除外).简单说就是需要先在主包里预埋一个注册在 ...

最新文章

  1. android h5 有广告,那些H5在Android上显示的丧心病狂的坑
  2. 《大数据》第1期“动态”——站在大数据的风口上
  3. 陕西省高等数学竞赛_关于参加“陕西高校第十二次大学生高等数学竞赛”的通知...
  4. Disruptor内存消息队列的资料整理
  5. python抓取图片_Python3简单爬虫抓取网页图片
  6. 数据科学包14-matplotlib-6种图形的基本画法
  7. 推荐7 款实用好用的电脑软件
  8. 【php导出excel,大量导出,文本格式】
  9. 贪心算法 --- 例题2.哈夫曼编码问题
  10. element-this.$confirm确定-取消位置交换
  11. CUDA编程.cu文件
  12. 增值电信业务经营许可证怎么办理icp许可证
  13. @Vaild注解使用详解
  14. TCP/IP网络编程:计算器服务器端/客户端
  15. 触屏笔哪里便宜?高性价比第三方电容笔推荐
  16. 寄存器总结之通用寄存器
  17. 如何推导出Gamma分布
  18. 砥砺前行!就从Infortrend媒体共享存储开始
  19. Principles of fMRI 1课程笔记8--fMRI的数据预处理
  20. iKcamp出品|微信小程序|小试牛刀(视频)+发布流程|基于最新版1.0开发者工具初中级教程分享

热门文章

  1. C盘扩容,不需要相邻盘清空
  2. 基于小波变换的脉搏信号滤波matlab仿真
  3. symfony框架Twig模板语言的使用
  4. python爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取上千条新闻
  5. android activity 实际,如何整合Zxing条形码扫描器而不安装实际的zxing应用程序(无法解析符号:.android.CaptureActivity)?...
  6. 第一阶段项目(2 body)
  7. 【初识】初学编程,望多指教
  8. (灵感)集设网关于设计灵感的网站
  9. PMP49个子过程ITTO总结
  10. 微信小程序图表插件(wx-charts)