要求

    • 必备知识

      JAVA基础知识,XML基础知识,数据库的基本操作。

    • 开发环境

      MyEclipse10/MySql5.5

    • 资料下载

      源码下载

 

数据库在数据查询,修改,保存,安全等方面与其他数据处理手段有绝对的优势,而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) 学习笔记二

作者:Li-Cheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

JAVA中 XML与数据库互转 学习笔记三的更多相关文章

  1. 1.JAVA中使用JNI调用C++代码学习笔记

    Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI?  Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...

  2. 第70节:Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  3. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

  4. Java中XML数据

    Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...

  5. Java中连接MySql数据库的例子

    Java中连接MySql数据库的例子: package com.joinmysql.demo; import java.sql.DriverManager; import java.sql.Resul ...

  6. 【Redis数据库】命令学习笔记——发布订阅、事务、脚本、连接等命令汇总

    本篇基于redis 4.0.11版本,学习发布订阅.事务.脚本.连接的相关命令. Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 序号 ...

  7. Flas-SQLAchemy数据库操作使用学习笔记

    Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...

  8. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  9. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

随机推荐

  1. 引用数据类型(Scanner类、Random类)

    Scanner类 Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固 ...

  2. bootstrap 警告框单个删除

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  3. 使用PinYin4j.jar将汉字转换为拼音

    package com.Test.util; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j ...

  4. AngularJS 服务 provider factory service及区别

    一.概念说明 1.服务是对公共代码的抽象,如多个控制器都出现了相似代码,把他们抽取出来,封装成一个服务,遵循DRY原则,增强可维护性,剥离了和具体表现相关的部分,聚焦于业务逻辑或交互逻辑,更加容易被测 ...

  5. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  6. 在线团队协作工具+在线UML工具

    话不多说直接上https://worktile.com去看,顺便附上小众软件上面的介绍 默默增加worktile的外国原版https://trello.com/,worktile照着trello做的, ...

  7. 工作随笔——Java网络代理(http,socks)

    简单说一下Java如何便捷的使用网络代理功能 此方法使用于大部分情况,一些特殊框架(如:mina)无效. // 代码设置http代理 System.setProperty("proxySet ...

  8. Git之初识

    我的Github地址:https://github.com/shinianzongjishinianxin 初见总是美好的,可是我第一次看到github有点纠结,因为看不懂,然而最终半蒙半猜还是注册完 ...

  9. TaskCreationOptions.LongRunning 运行比可用线程数更多的任务

    最近在学WebSocket,服务端需要监听多个WebSocket客户端发送的消息. 开始的解决方法是每个WebSocket客户端都添加一个线程进行监听,代码如下: /// <summary> ...

  10. C#通过字符串名称来调用对应字符串名称的方法

    前段时间在一个项目中,在一个地方要将函数所在类中的方法都调用一遍,但是否调用要通过配置文件中的内容决定.所以为了减少代码量,在网上查了相关信息,终于成功的将其应用到了项目中,我在这里将我做的一个简单例 ...