Java实现数据库数据生成XML文件的通用程序
2013-12-05 11:22
253 查看
转自http://tieba.baidu.com/p/136643159
原篇内容缺失,本篇对其进行整理,以备后用。
本篇使用w3c.dom解析。方法实现将查询结果集(ResultSet对象)和要生成的XML文件的路径传人,然后自己指派属性名称、元素名称并与对应的查询结果集中的字段对应,最后调用designOver()函数生成所期望的XML文件。
方法包含5个类:CreateXmlFile.java, XmlDisposal.java, SaveAttrName.java, SaveEleName.java, WriteXmlFile.java。
SaveAttrName.java:
SaveEleName.java:
XmlDisposal.java:
WriteXmlFile.java:
注明:XmlDocument这个类的使用需要引入crimson.jar
CreateXmlFile.java
测试类test.java
在D盘根目录下生成demo.xml文件:
数据库book表记录如下:
原篇内容缺失,本篇对其进行整理,以备后用。
本篇使用w3c.dom解析。方法实现将查询结果集(ResultSet对象)和要生成的XML文件的路径传人,然后自己指派属性名称、元素名称并与对应的查询结果集中的字段对应,最后调用designOver()函数生成所期望的XML文件。
方法包含5个类:CreateXmlFile.java, XmlDisposal.java, SaveAttrName.java, SaveEleName.java, WriteXmlFile.java。
SaveAttrName.java:
public class SaveAttrName { private String attrName; private int index; public SaveAttrName(String attrName, int index) { super(); this.attrName = attrName; this.index = index; } public String getAttrName() { return attrName; } public void setAttrName(String attrName) { this.attrName = attrName; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
SaveEleName.java:
public class SaveEleName { private String eleName; private int index; public SaveEleName(String eleName, int index) { super(); this.eleName = eleName; this.index = index; } public String getEleName() { return eleName; } public void setEleName(String eleName) { this.eleName = eleName; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
XmlDisposal.java:
public class XmlDisposal { private ResultSet rs; //查询结果集 private String url; //要生成的xml文件的路径 private ArrayList attrList = new ArrayList(); //用来存储属性名和字段索引的集合类 private ArrayList eleList = new ArrayList(); //用来存储元素名和字段索引的集合类 private String root; private String rootChild; public void setResultSet(ResultSet rs, String url) { this.rs = rs; this.url = url; } public void setRootName(String root, String rootChild) { this.root = root; this.rootChild = rootChild; } public void collectData(String nameStr, int index, String type) { if(type.equals("attribute")) { attrList.add(new SaveAttrName(nameStr, index)); } else { eleList.add(new SaveEleName(nameStr, index)); } } public void startWrite() { new WriteXmlFile(attrList, eleList, rs, url).create(root, rootChild); } }
WriteXmlFile.java:
public class WriteXmlFile { private ResultSet rs; private String url; private ArrayList arrtList; private ArrayList elemList; public WriteXmlFile(ArrayList arrtList, ArrayList elemList, ResultSet rs, String url) { super(); this.rs = rs; this.url = url; this.arrtList = arrtList; this.elemList = elemList; } /** * @param root xml文件的根元素名 * @param rootchild */ public void create(String root, String rootChild) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document document = null; try { DocumentBuilder db = dbf.newDocumentBuilder(); document = (Document) db.newDocument(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } Element rootElem = document.createElement(root); document.appendChild(rootElem); Iterator attr = arrtList.iterator(); Iterator elem = elemList.iterator(); try { while (rs.next()) { Element rootChildElem = document.createElement(rootChild); while (attr.hasNext()) { // 循环到属性集合中取元素名称,之后从查询结果集中取得数据,创建元素属性 SaveAttrName temp = (SaveAttrName) attr.next(); rootChildElem.setAttribute(temp.getAttrName(), rs .getString(temp.getIndex()).trim()); } rootElem.appendChild(rootChildElem); while (elem.hasNext()) { // 循环到元素集合中取元素名称,之后从查询结果集中取得数据,创建结点 SaveEleName temp = (SaveEleName) elem.next(); Element tempElem = document .createElement(temp.getEleName()); Text tempTextElem = document.createTextNode(rs.getString( temp.getIndex()).trim()); tempElem.appendChild(tempTextElem); rootChildElem.appendChild(tempElem); } attr = arrtList.iterator(); // 重复循环到集合中取值 elem = elemList.iterator(); // 重复循环到集合中取值 } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } writeXml(document); } private void writeXml(Document doc) { try { FileOutputStream out = new FileOutputStream(url); OutputStreamWriter outWriter = new OutputStreamWriter(out); ((XmlDocument) doc).write(outWriter, "UTF-8"); outWriter.close(); out.close(); System.out.print("\nWrite xmlfile successful!\n"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
注明:XmlDocument这个类的使用需要引入crimson.jar
CreateXmlFile.java
public class CreateXmlFile { private ResultSet rs; //查询结果集 private String url; //要生成的xml文件的路径 private XmlDisposal disposal; //自定义的用来收集和处理数据的类 private String root; //xml文件的根元素名称 private String rootChild; //根结点的子结点的元素名称 public CreateXmlFile(ResultSet rs, String url) { super(); this.rs = rs; this.url = url; disposal = new XmlDisposal(); disposal.setResultSet(this.rs, this.url); } //设定xml文件的根元素名称 public void setRootEleName(String root, String rootChild) { this.root = root; this.rootChild = rootChild; disposal.setRootName(this.root, this.rootChild); } //设置属性的名字和索引位置,位置从1开始 public void serAttrName(String nameStr, int index) { disposal.collectData(nameStr, index, "attribute"); } //设置元素的名字和索引位置,位置从1开始 public void setEleName(String nameStr, int index) { disposal.collectData(nameStr, index, "element"); } public void designOver() { disposal.startWrite(); } }
测试类test.java
public static void main(String[] args) { // TODO Auto-generated method stub Connection conn = DBUtil.getConnection(); Statement stmt; try { stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(DBUtil.getSql()); /*int columnCount = rs.getMetaData().getColumnCount(); while (rs.next()) { //rs.afterLast(); //System.out.println(rs.getRow()); for (int i = 1; i <= columnCount; i++) { System.out.print(rs.getObject(i) + "\t"); } }*/ CreateXmlFile xml = new CreateXmlFile(rs, "d:/demo.xml"); xml.setRootEleName("books","book"); xml.serAttrName("title", 1); //xml.setEleName("title", 1); xml.setEleName("author", 2); xml.setEleName("year", 3); xml.setEleName("price", 4); xml.designOver(); rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
在D盘根目录下生成demo.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <books> <book title="Harry Potter"> <author>J K. Rowling</author> <year>2005-01-01</year> <price>30</price> </book> <book title="Everyday Italian"> <author>Giada De Laurentiis</author> <year>2005-01-01</year> <price>30</price> </book> <book title="Learning XML"> <author>Erik T. Ray</author> <year>2003-01-01</year> <price>40</price> </book> <book title="XQuery Kick Start"> <author>James McGovern, Per Bothner</author> <year>2003-01-01</year> <price>50</price> </book> </books>
数据库book表记录如下:
+-------------------+-----------------------------+------+-------+ | title | author | year | price | +-------------------+-----------------------------+------+-------+ | Harry Potter | J K. Rowling | 2005 | 30 | | Everyday Italian | Giada De Laurentiis | 2005 | 30 | | Learning XML | Erik T. Ray | 2003 | 40 | | XQuery Kick Start | James McGovern, Per Bothner | 2003 | 50 | +-------------------+-----------------------------+------+-------+ 4 rows in set
相关文章推荐
- 用java语言将数据库中的数据表转换为xml文件的通用程序(转)
- java小程序从数据库中(表)中读取数据然后创建文件夹生成txt文件
- 用java语言将数据库中的数据表转换为xml文件的通用程序
- nodejs实现,每天定时自动读取数据库数据-生成excel表格-发送给老板邮箱
- Extjs分页使用java实现数据库数据查询
- 数据库间复制数据 非DTS程序实现
- 怎么取出数据库中表的数据生成XML文件
- 定时器中实现数据库表数据移动的功能,Exception in thread "Timer-0" isExist java.lang.NullPointerException定时器中线程报错。
- java 实现excel中的数据导入到数据库的功能
- 将关系系数据库转化为xml文件的通用程序
- Java读取数据库数据生成柱状图
- 关于Java Web 使用 iText 将数据库中的 表 的数据 生成 PDF 格式文件(升級版本)
- 利用php访问数据库数据表,生成javabean.java文件,符合javabean语法
- Java实现头像截取裁剪后图片保存,获取的是base64数据,怎么转换为图片并保存到数据库。
- 使用JAVA语言中的addBatch和executeBatch()实现数据批处理插入数据库
- Java读取数据库数据生成柱状图
- 关于用java对excel数据扫描到数据库中然后在导出来后用excel打开的程序:
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作