1.1 XML简介
XML指的是可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据,XML很重要,也很容易学习。
XML是一种很像HTML的 标记语言,需要注意的是,它是被设计为传输数据,而不是像HTML那样用于显示数据,另外XML标签没有被预定义,需要我们自己定义标签。
1.2 XML有什么作用呢?
XML是对HTML的补充,是不会代替HTML的,这一点很重要。XML在web开发中非常重要,而它的作用在于传输数据。可以这么描述XML:XML是独立于软件和硬件的信息传输工具。
下面是利用dom操作,将Oracle的c##scott用户中dept表内容生成xml文件保存在硬盘上。
首先,先要创建连接数据库的类:
package org.bruis.dbc;
import java.sql.Connection ;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCLBRUS" ;
private static final String DBUSER = "c##scott" ;
private static final String DBPASSWORD = "tiger" ;
private Connection conn = null ;
public DatabaseConnection() {
try {
Class.forName(DBDRIVER) ;
} catch(ClassNotFoundException e) {
e.printStackTrace() ;
}
try{
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
} catch(SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return this.conn ;
}
public void close() {
if(this.conn != null) {
try {
this.conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
利用dom操作实现:
package org.bruis.XML;
import java.io.*;
import java.sql.*;
import javax.xml.parsers.*;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer ;
import javax.xml.transform.dom.DOMSource ;
import javax.xml.transform.stream.StreamResult ;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.bruis.dbc.DatabaseConnection;
public class CreateXMLDemo {
/*
* 使用DOM来将生成的XML文件输出到指定目录中,有几个重要的步骤
* 1.建立DocumentBuilderFactory
* 2.建立DocumentBuilder
* 3.建立Document
* 4.建立TransformerFactory
* 5.建立Transformer
* 6.建立DOMSource
* 7.建立StreamResult
*
* */
private Connection conn = null ;
private PreparedStatement pstmt = null ;
private ResultSet rs = null ;
public static void main(String[] args) {
new CreateXMLDemo() ;
}
public CreateXMLDemo() {
DatabaseConnection dbc = new DatabaseConnection() ;
conn = dbc.getConnection() ;
String sql = "select * from dept" ;
try {
pstmt = conn.prepareStatement(sql) ;
rs = pstmt.executeQuery() ;
DocumentBuilder builder = getBuilder() ;
Document doc = builder.newDocument() ;
Element dept = doc.createElement("dept") ;
while(rs.next()) {
Element deptno = doc.createElement("deptno") ;
Element dname = doc.createElement("dname") ;
Element loc = doc.createElement("loc") ;
deptno.appendChild(doc.createTextNode(rs.getString(1))) ;
dname.appendChild(doc.createTextNode(rs.getString(2))) ;
loc.appendChild(doc.createTextNode(rs.getString(3))) ;
dept.appendChild(deptno) ;
dept.appendChild(dname) ;
dept.appendChild(loc) ;
}
doc.appendChild(dept) ;
DOMXML(doc);
} catch(SQLException e) {
e.printStackTrace();
}
dbc.close();
}
public DocumentBuilder getBuilder() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
DocumentBuilder builder = null ;
try {
builder = factory.newDocumentBuilder();
} catch(ParserConfigurationException e) {
e.printStackTrace();
}
return builder ;
}
public void DOMXML(Document doc) {
TransformerFactory tfactory = TransformerFactory.newInstance() ;
Transformer tf = null ;
try {
tf = tfactory.newTransformer() ;
} catch (TransformerConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
tf.setOutputProperty(OutputKeys.ENCODING,"GBK") ;
DOMSource source = new DOMSource(doc) ;
StreamResult result = null ;
result = new StreamResult(new File("e:" + File.separator + "OrclToXML.xml")) ;
try {
tf.transform(source, result);
} catch (TransformerException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}
利用jdom来实现:
package org.bruis.XML;
import java.io.File;
import java.io.FileOutputStream ;
import java.io.IOException;
import java.sql.* ;
import org.bruis.dbc.DatabaseConnection ;
import org.jdom.Document;
import org.jdom.Element ;
import org.jdom.output.XMLOutputter ;
public class JdomCreateXml {
private Connection conn = null ;
private PreparedStatement pstmt = null ;
private ResultSet rs = null ;
public static void main(String[] args) {
new JdomCreateXml() ;
}
public JdomCreateXml() {
DatabaseConnection dbc = new DatabaseConnection() ;
conn = dbc.getConnection();
String sql = "select * from dept " ;
try {
pstmt = conn.prepareStatement(sql) ;
rs = pstmt.executeQuery() ;
Element dept = new Element("dept") ;
while(rs.next()) {
Element deptinfo = new Element("deptinfo") ;
Element deptno = new Element("deptno") ;
Element dname = new Element("dname") ;
Element loc = new Element("loc") ;
deptno.setText(rs.getString(1)) ;
dname.setText(rs.getString(2)) ;
loc.setText(rs.getString(3)) ;
deptinfo.addContent(deptno) ;
deptinfo.addContent(dname) ;
deptinfo.addContent(loc) ;
dept.addContent(deptinfo) ;
}
Document doc = new Document(dept) ;
DoJdom(doc) ;
} catch(SQLException e) {
e.printStackTrace();
}
}
public void DoJdom(Document doc) {
XMLOutputter output = new XMLOutputter() ;
output.setFormat(output.getFormat().setEncoding("GBK"));//设置编码为GBk
try {
output.output(doc, new FileOutputStream("e:" + File.separator + "Jdomdemo.xml"));
} catch(IOException e) {
e.printStackTrace();
}
}
}
利用dom4j来实现:
package org.bruis.XML;
import java.io.*;
import java.sql.* ;
import org.bruis.dbc.*;
import org.dom4j.DocumentHelper;
import org.dom4j.io.*;
import org.dom4j.*;
public class Dom4jCreateXML {
private Connection conn ;
private PreparedStatement pstmt ;
private ResultSet rs ;
public static void main(String[] args) {
new Dom4jCreateXML() ;
}
public Dom4jCreateXML() {
DatabaseConnection dbc = new DatabaseConnection() ;
//打开数据库
conn = dbc.getConnection();
String sql = "select * from dept " ;
Document doc = DocumentHelper.createDocument();
try {
pstmt = conn.prepareStatement(sql) ;
rs = pstmt.executeQuery();
Element dept = doc.addElement("dept") ;
while(rs.next()) {
Element deptno = dept.addElement("deptno") ;
Element dname = dept.addElement("dname") ;
Element loc = dept.addElement("loc") ;
deptno.setText(rs.getString(1)) ;
dname.setText(rs.getString(2));
loc.setText(rs.getString(3));
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = null ;
try {
writer = new XMLWriter(new FileOutputStream("e:" + File.separator + "Dom4jDemo.xml"),format) ;
writer.write(doc);
writer.close();
} catch(IOException e) {
e.printStackTrace();
}
System.out.println("成功...");
} catch(SQLException e) {
e.printStackTrace();
}
//关闭数据库
dbc.close();
}
}
实现效果:
文件Dom4jDemo.xml
文件OrclToXml.xml:
文件Jdomdemo.xml: