要求

    • 必备知识

      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. 【python-crypto】导入crypto包失败的情况,怎么处理

    [python-crypto]导入crypto包失败的情况,怎么处理 是因为你自己安装的python的版本太高,所以自己降版本吧,捣鼓了一下午 pip install crypto pip insta ...

  2. hdu 1.2.8

    #include<cstdio> #include<iostream> using namespace std; int pow(int a,int b) { ; while( ...

  3. [Proposal][app]觅食去

    又要加班,午饭晚饭怎么解决?每天吃食堂换个口味可是不想出门怎么办?顿顿麦当劳,看见汉堡就想吐,下一顿吃什么? 来点个外卖吧! 可是去哪儿点呢—— 百度外卖?美团外卖?饿了么?KFC宅急送?………… 统 ...

  4. nuget.org无法解析的办法

    今天想学习ef框架,就着手安装最新的ef啦.可是遇到了问题,提示 未能解析此远程名称:'nuget.org' 就去上网找资料啦,发现原来是被墙了,表示无奈. 网上的资料提示,修改hosts文件或是dn ...

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

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

  6. JAVA学习笔记1——环境配置

    ·JDK 发展史 1995 java语言诞生 1996 JDK1.0发布 1997 JDK1.1发布 1998 JDK1.2发布(Java2),JFC/Swing技术发布 1999 Java被分成了J ...

  7. 【vue】项目编译报错‘npm ERR! **@**dev: `webpack-dev-server --inline --progress --config ’’

    关于npm ERR! **@**dev: `webpack-dev-server --inline --progress --config‘ 原因:这是新版webpack存在的BUG,卸载现有的新版本 ...

  8. SQL注入之PHP-MySQL实现手工注入-数字型

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎 ...

  9. C#6.0语言规范(十七) 特性

    许多C#语言使程序员能够指定有关程序中定义的实体的声明性信息.例如,在一个类中的方法的可访问性由与装饰它指定method_modifier小号public,protected,internal,和pr ...

  10. day 39 jq 学习入门2

    ---恢复内容开始--- 前情提要: jq 是用来降低js 的工作的一个组件 一:利用jq 实现动画效果 <!DOCTYPE html> <html lang="en&qu ...