JAVA中 XML与数据库互转 学习笔记三
数据库在数据查询,修改,保存,安全等方面与其他数据处理手段有绝对的优势,而XML文件是基于标记的文本文件,兼容性好,便于组织,解析和交换数据。在某些情况下我们需要讲XML数据导入到数据库中,发挥数据库在管理数据方面的优势;另一方面,我们需要讲数据库中的数据导入到XML文件中,以便与其它系统交互数据,发挥XML文件在数据交换上的优势。下我介绍普通DOM和Dom4J,两种方式实现 XML和数据库 互转。
Dom4j实现XML与数据库互转:
英语六级词汇 xml文件下载
数据库Sql代码:
dom4j(如对dom4j不了解可以点击这里)将xml数据导入到数据库中:XMLToDatabase.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element; public class XMLToDatabase { public static void toDatabase(){ Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
connection=JDBCUtilSingle.getInitJDBCUtil().getConnection();
String sql="INSERT INTO `xmlanddb`.`dict` (`id`, `word`, `meaning`, `lx`) VALUES (NULL, ?, ?, ?);";
try {
statement=connection.prepareStatement(sql);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} Document document=Dom4j.load("dict.xml");
Element root=Dom4j.getRootElement(document);
List words = root.elements("word"); //word节点列表
String wordStr="",meaningStr="",lxStr="";
for (Iterator i = words.iterator(); i.hasNext();) { Element word= (Element) i.next(); //单个word节点 for(Iterator k=word.elementIterator();k.hasNext();){ //遍历 name mean lx节点
Element element = (Element) k.next();
if(element.getName().equals("name")){
wordStr=element.getText(); }
if(element.getName().equals("mean")){
meaningStr=element.getText();
}
if(element.getName().equals("lx")){
lxStr=element.getText();
}
} try { statement.setString(1,wordStr);
statement.setString(2,meaningStr);
statement.setString(3,lxStr);
statement.executeUpdate(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
JDBCUtilSingle.getInitJDBCUtil().closeConnection(rs, statement, connection);
} public static void main(String[] args){
toDatabase();
} }
dom4j(如对dom4j不了解可以点击这里)将数据库中记录导入到xml文件中:DatabaseToXML.java
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter; public class DatabaseToXML { public static void toXML(){ Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
connection=JDBCUtilSingle.getInitJDBCUtil().getConnection();
String sql="SELECT * FROM `dict`"; Document document = DocumentHelper.createDocument();
Element root = document.addElement("dict");// 创建根节点 try {
statement=connection.prepareStatement(sql);
rs=statement.executeQuery();
while(rs.next()){ Element word = root.addElement("word");
Element name = word.addElement("name");
name.setText(rs.getString("word"));
Element mean=word.addElement("mean");
mean.addCDATA(rs.getString("meaning"));
Element lx=word.addElement("lx");
lx.addCDATA(rs.getString("lx")); }
XMLWriter writer=new XMLWriter(new FileWriter(new File("dict2.xml")));
writer.write(document);
writer.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) {
// TODO Auto-generated method stub
toXML();
} }
普通Dom(java中dom解析器不了解可以点击这里)实现XML与数据库互转:
student2.xml
Sql代码:
Dom(java中dom解析器不了解可以点击这里)将xml数据导入到数据库中:XMLToDatabaseWithDom.java
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; /**
* 讲XML文件导入到数据库
* @author licheng
*
*/
public class XMLToDatabaseWithDom { /**
* 讲 学生XML文件导入到数据库中
*/
public void toDatabase(){
Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
connection=JDBCUtilSingle.getInitJDBCUtil().getConnection();
String sql="INSERT INTO `xmlanddb`.`student` (`number`, `name`, `date`, `height`) VALUES (?,?,?,?);";
try {
statement=connection.prepareStatement(sql);
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true); //忽略空白缩进
DocumentBuilder domParser=factory.newDocumentBuilder();
Document document=domParser.parse(new File("student2.xml")); //通过已经存在的文件创建Document对象
Element root=document.getDocumentElement();
NodeList list1=root.getElementsByTagName("学号");
NodeList list2=root.getElementsByTagName("姓名");
NodeList list3=root.getElementsByTagName("出生日期");
NodeList list4=root.getElementsByTagName("身高");
int size=list1.getLength(); //获取长度
String[] number=new String[4];
String[] name=new String[4];
String[] date=new String[4];
double[] height=new double[4];
for(int k=0;k<size;k++){
Node numberNode=list1.item(k);
Node nameNode=list2.item(k);
Node dateNode=list3.item(k);
Node heightNode=list4.item(k);
number[k]=numberNode.getTextContent().trim();
name[k]=nameNode.getTextContent().trim();
date[k]=dateNode.getTextContent().trim();
height[k]=Double.parseDouble(heightNode.getTextContent().trim());
statement.setString(1, number[k]);
statement.setString(2, name[k]);
statement.setString(3, date[k]);
statement.setDouble(4, height[k]);
statement.executeUpdate();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
JDBCUtilSingle.getInitJDBCUtil().closeConnection(rs, statement, connection);
}
} /**
* 读取数据库中的数据
*/
public void getItemFromDatabase(){
Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
connection=JDBCUtilSingle.getInitJDBCUtil().getConnection();
String sql="SELECT * FROM `student` ";
try {
statement=connection.prepareStatement(sql);
rs=statement.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getDouble(4));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args){
//new XMLToDatabase().toDatabase();
new XMLToDatabaseWithDom().getItemFromDatabase();
}
}
Dom(java中dom解析器不了解可以点击这里)将数据库中记录导入到xml文件中:DatabaseToXMLWithDom.java
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node; public class DatabaseToXMLWithDom { public void toXML(){ /**
* 讲数据记录存入到数组中
*/
String[] number={""};
String[] name={""};
String[] date={""};
String[] height={""};
Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
connection=JDBCUtilSingle.getInitJDBCUtil().getConnection();
String sql="SELECT * FROM `student` ";
try {
statement=connection.prepareStatement(sql);
rs=statement.executeQuery();
rs.last(); //讲游标移到结果集的最后一行
int recordAmount=rs.getRow(); //获取记录数据
number=new String[recordAmount];
name=new String[recordAmount];
date=new String[recordAmount];
height=new String[recordAmount];
int k=0;
rs.beforeFirst(); //讲游标移到第一条记录前
while(rs.next()){
number[k]=rs.getString(1);
name[k]=rs.getString(2);
date[k]=rs.getString(3);
height[k]=String.valueOf(rs.getDouble(4));
k++;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
JDBCUtilSingle.getInitJDBCUtil().closeConnection(rs, statement, connection);
} /**
* 将数据导入到XML文件
*/
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true); //忽略空白缩进
DocumentBuilder domParser;
try {
domParser = factory.newDocumentBuilder();
Document document=domParser.newDocument(); //通过调用newDocument() 方法获取实例
document.setXmlVersion("1.0"); //设置 xml版本号
Element root=document.createElement("学生信息");
document.appendChild(root);
for(int k=0;k<name.length;k++){
Node student=document.createElement("学生");
root.appendChild(student); Node xuehao=document.createElement("学号");
xuehao.appendChild(document.createTextNode(number[k])); Node xingming=document.createElement("姓名");
xingming.appendChild(document.createTextNode(name[k])); Node chusheng=document.createElement("出生日期");
chusheng.appendChild(document.createTextNode(date[k])); Node shenggao=document.createElement("身高");
shenggao.appendChild(document.createTextNode(height[k])); student.appendChild(xuehao);
student.appendChild(xingming);
student.appendChild(chusheng);
student.appendChild(shenggao); TransformerFactory transFactory=TransformerFactory.newInstance(); //工厂对象获取transFactory实例
Transformer transformer=transFactory.newTransformer(); //获取Transformer实例
DOMSource domSource=new DOMSource(document);
File file=new File("newXML2.xml");
FileOutputStream out=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(out);
transformer.transform(domSource, xmlResult);
out.close(); }
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new DatabaseToXMLWithDom().toXML();
} }
相关内容,请查看:
JAVA与DOM解析器基础 学习笔记
JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二
JAVA中 XML与数据库互转 学习笔记三的更多相关文章
- 1.JAVA中使用JNI调用C++代码学习笔记
Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI? Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...
- 第70节:Java中xml和tomcat
第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...
- Java中XML格式的字符串4读取方式的简单比较
Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...
- Java中XML数据
Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...
- Java中连接MySql数据库的例子
Java中连接MySql数据库的例子: package com.joinmysql.demo; import java.sql.DriverManager; import java.sql.Resul ...
- 【Redis数据库】命令学习笔记——发布订阅、事务、脚本、连接等命令汇总
本篇基于redis 4.0.11版本,学习发布订阅.事务.脚本.连接的相关命令. Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 序号 ...
- Flas-SQLAchemy数据库操作使用学习笔记
Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
随机推荐
- Silverlight样式定义
方法一.定义在控件内部 <Canvas Background="Red" Height="100" HorizontalAlignment="L ...
- 从点到面,给Button的属性动画
属性动画是API 11加进来的一个新特性,其实在现在来说也没什么新的了.属性动画可以对任意view的属性做动画,实现动画的原理就是在给定的时间内把属性从一个值变为另一个值.因此可以说属性动画什么都可以 ...
- 2018-03-13 HTTP Socket TCP学习
协议学习: https://www.jianshu.com/p/a5410f895d6b https://www.jianshu.com/p/42260a2575f8 实际例子: nano实际例子,和 ...
- (转)可伸缩性最佳实践:来自eBay的经验
转自:http://www.infoq.com/cn/articles/ebay-scalability-best-practices 在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力.我们所做的 ...
- speex编解码在android上实现
以前在应用中使用到了Speex编解码,近来总结了一下Speex在android上的实现.Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式.Speex工程着力于通过提供一个可以替代高性能 ...
- Beta版本冲刺准备
1. 介绍小组新加入的成员,Ta担任的角色. 姓名 王华俊 爱好 PS ,听音乐等等 编程方向 Java小程序,GUI 团队内担任的角色 美工 让他担任这个角色的理由:不同于别人的直男审美 2. 讨论 ...
- cnn的说明
概述 前面的练习中,解决了一些有关低分辨率图像的问题,比如:小块图像,手写数字小幅图像等.在这部分中,我们将把已知的方法扩展到实际应用中更加常见的大图像数据集. 全联通网络 在稀疏自编码章节中,我们介 ...
- 通过 sysprocesses 简单查询死锁及解决死锁办法
简单查询死锁,如下四步可以轻松解决: 第一步:查询死锁语句 1: 条件是 blocked <> 0 select dbid,* from sys.sysprocesseswhere 1=1 ...
- 记Asp.Net Core Swagger 使用 并带域接口处理
引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升.但是使用Swagger时如果只是一般的控 ...
- ASP.NET MVC 做的网站项目
感谢博客园团队日夜为广大需要获取知识人们所做的奉献 博客园团队您们辛苦了 ASP.NET MVC 实现有论坛功能的网站(有iis发布网站 这是之前写的... www.lazyfitness.cn 经过 ...