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

一、使用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;
	}
	@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、结果

数据库的将数据展示
数据库中的数据
控制台的数据输出
控制台的数据输出

要将解析后的XML数据存入达梦数据库,可以按照以下步骤进行: 1. 使用XML解析器(如Java中的DOM或SAX解析器)读取XML文件,并将其解析成程序可用的数据格式,例如Java中的Document对象。 2. 遍历解析后的数据,提取需要存入数据库数据,并将其转换为达梦数据库数据格式,例如Java中的PreparedStatement对象。 3. 使用JDBC连接到达梦数据库,并将转换后的数据插入到数据库中,例如Java中的executeUpdate()方法。 下面是一个Java示例代码,演示了如何将解析后的XML数据存入达梦数据库: ```java import java.sql.*; import javax.xml.parsers.*; import org.w3c.dom.*; public class XmlToDm { public static void main(String[] args) { try { // 解析XML文件 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("data.xml"); // 连接到达梦数据库 Class.forName("dm.jdbc.driver.DmDriver"); Connection conn = DriverManager.getConnection("jdbc:dm://localhost:5236", "user", "password"); // 提取需要存入数据库数据 NodeList nodes = doc.getElementsByTagName("person"); for (int i = 0; i < nodes.getLength(); i++) { Element person = (Element) nodes.item(i); String name = person.getAttribute("name"); int age = Integer.parseInt(person.getAttribute("age")); // 将数据转换为达梦数据库数据格式 PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age) VALUES (?, ?)"); stmt.setString(1, name); stmt.setInt(2, age); // 插入数据到达梦数据库 int rows = stmt.executeUpdate(); System.out.println(rows + " row(s) inserted."); } // 关闭数据库连接 conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们首先使用Java内置的XML解析解析了名为"data.xml"的XML文件,并遍历了其中的"person"元素,提取了"name"和"age"属性的值,并将其转换为达梦数据库数据格式。接着,我们使用JDBC连接到达梦数据库,并将转换后的数据插入到"person"表中。最后,我们关闭了数据库连接。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值