`
云水禅心
  • 浏览: 26259 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

用java语言将数据库中的数据表转换为xml文件的通用程序

    博客分类:
  • java
xml 
阅读更多
  我是用dom解析的,用纯java语言编写,程序包括5个类:CreateXmlFile.java、Disposal.java、SaveAttrName.java、SaveEleName.java、WriteXmlFile.java
真正与用户交互的只有CreateXmlFile.java,如果不想了解程序逻辑,可不用管其他类。代码讲解及示例如下:  文件 CreateXmlFile.java 内容:
package currencycreatexml;import java.sql.*;
public class CreateXmlFile
{
private ResultSet rs;     //从下面的程序可以看出,此字段可省略,懒得改了,呵呵
private String url;       //从下面的程序可以看出,此字段可省略,懒得改了,呵呵
private Disposal disposal; //自定义的用来收集和处理数据的类
private String root;       //xml文件的根元素名称
private String rootchild;  //根结点的子结点的元素名称
/**
  * @param rs : 创建xml文件所需的查询结果集
  * @param url : 指定xml文件的生成路径(包括xml文件的文件名)
  */
public CreateXmlFile(ResultSet rs,String url)
{
  this.rs=rs;
  this.url=url;
  disposal=new Disposal();
  disposal.setResultSet(this.rs,this.url);
}
//设定xml文件的根元素名称
public void setRootElementName(String root,String rootchild)
{
  this.root=root;
  this.rootchild=rootchild;
  disposal.setRootName(this.root,this.rootchild);
}
//设置属性的名字和索引位置,位置从1开始
/**
  * @param namestring 指定属性的名称
  * @param index 指定此属性的值在查询结果集中第几个字段(字段从1开始索引)
  */
public void setAttributeName(String namestring,int index)
{
  disposal.collectData(namestring,index,"attribute");
}
//设置元素的名字和索引位置,位置从1开始
/**
  * @param namestring 指定元素的名称
  * @param index 指定此元素的值在查询结果集中的第几个字段(字段从1开始索引)
  */
public void setElementName(String namestring,int index)
{
  disposal.collectData(namestring,index,"element");
}
/**
* 调用此方法则立即开始创建xml文件,在属性与元素都已指派完毕后调用此方法
*/
public void designOver()
{
  disposal.startWrite();
}
}
文件 Disposal.java 内容:package currencycreatexml;import java.util.*;
import java.sql.*;class Disposal
{
private ResultSet rs;
private String url;
private ArrayList attrilist=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;
}
@SuppressWarnings("unchecked")
public void collectData(String namestring,int index,String type )
{
  if(type.equals("attribute"))
   attrilist.add(new SaveAttrName(namestring,index));
  else
   elelist.add(new SaveEleName(namestring,index));
   //System.out.println("else");
  //System.exit(0);
}
public void startWrite()
{
  new WriteXmlFile(attrilist,elelist,rs,url).create(root,rootchild);
}
}
文件 SaveAttrName.java 内容:package currencycreatexml;class SaveAttrName
{
private String attributename;
private int index;
public SaveAttrName(String attributename,int index)
{
  this.attributename=attributename;
  this.index=index;
}
public String getAttributeName()
{
  return attributename;
}
public int getIndex()
{
  return index;
}
}文件 SaveEleName.java 内容:package currencycreatexml;class SaveEleName
{
private String elementname;
private int index;
public SaveEleName(String elementname,int index)
{
  this.elementname=elementname;
  this.index=index;
}
public String getElementName()
{
  return elementname;
}
public int getIndex()
{
  return index;
}
}文件 WriteXmlFile.java 内容:package currencycreatexml;import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import javax.xml.parsers.*;import org.w3c.dom.*;               //使用dom解析
import org.apache.crimson.tree.*;  //写xml文件需要用到的jar包class WriteXmlFile
{
   private ResultSet rs;
   private String url;
   private ArrayList attrilist;
   private ArrayList elelist;
   public WriteXmlFile(ArrayList attrilist,ArrayList elelist,ResultSet rs,String url)
   {
      this.attrilist=attrilist;
      this.elelist=elelist;
      this.rs=rs;
      this.url=url;
   }
   /**
    * @param root : xml文件的根元素名
    */
   public void create(String root,String rootchild)
   {
      DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
      Document doc=null;
      try
      {
         DocumentBuilder db = dbf.newDocumentBuilder();
         doc = db.newDocument();
      }
      catch (ParserConfigurationException e)
      {
         e.printStackTrace();
      }
      Element rootelement=doc.createElement(root);
      doc.appendChild(rootelement);
      Iterator attri=attrilist.iterator();
      Iterator ele=elelist.iterator();
      //System.out.println("iterator");
      try
      {
         while(rs.next())
         {
            Element rootchildelement=doc.createElement(rootchild);
            //System.out.println("while");
            while(attri.hasNext())
            {
               /**
               *  循环到属性集合中取元素名称,之后从查询结果集中取得数据,创建元素属性
               */
               SaveAttrName temp=(SaveAttrName)attri.next();
               rootchildelement.setAttribute(temp.getAttributeName(),rs.getString(temp.getIndex()).trim());
            } 
            rootelement.appendChild(rootchildelement);
            while(ele.hasNext())
            {
               /**
               *  循环到元素集合中取元素名称,之后从查询结果集中取得数据,创建结点
               */
               SaveEleName temp=(SaveEleName)ele.next();
               Element tempelement=doc.createElement(temp.getElementName());
               Text temptextelement=doc.createTextNode(rs.getString(temp.getIndex()).trim());
               tempelement.appendChild(temptextelement);
               rootchildelement.appendChild(tempelement);
            }
            attri=attrilist.iterator(); //重复循环到集合中取值,下同
            ele=elelist.iterator();
         }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
      writeXml(doc);
   }
   private void writeXml(Document doc)
   {
      try
      {
         FileOutputStream outStream = new FileOutputStream(url);
         OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
         ((XmlDocument)doc).write(outWriter, "GB2312");
         outWriter.close();
         outStream.close();
         System.out.print("\nWrite xmlfile successful!\n");
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }
}讲解:
假设数据库中有一个表,表名为“CCNUstudents”,
表中有几条记录,现将它转换为xml文件,我转换的规则为将记录的关键字作为元素的属性,其它作为了结点。当然,你也可以以自己的规则将数据库中的任何字段设置为属性或元素。所有元素及属性的名称可以自定义,表中的内容为: 学号     姓名      学校         系别       家庭住址
20033274   邪    华中师范大学 信息管理系  湖北省监利县龚场镇
20043225  阿维   中南民族大学    经济系   湖北省监利县周老咀镇 假设关键字段为“学号”,则可将此表转换为一个xml文件:
示例代码如下:
文件 test.java 中测试函数的内容: public static void main(String[] args) throws Exception
{
  SQLExecute conn=new SQLExecute();
  ResultSet rs=conn.sqlQuery("select * from CCNUstudents");
  CreateXmlFile create = new CreateXmlFile(rs,"demo.xml");
  create.setRootElementName("学生基本信息","学生");
  create.setAttributeName("学生学号",1);
  create.setElementName("学生的姓名",2);
  create.setElementName("所在学校",3);
  create.setElementName("所在系",4);
                  create.setElementName("住址",5);
  create.designOver();
}
函数setAttributeName(String,int)及setElementName(String,int)中的String用来指定元素名或是属性名,int型数字用来关联此元素或属性的值是从表中的第几个字段取出来的。程序运行结果后,就会在当前目录下生成一个名为“demo.xml”的xml文件,文件内容为:<?xml version="1.0" encoding="GB2312"?><学生基本信息><学生 学生学号="20033274">
<学生的姓名>邪</学生的姓名>
<所在学校>华中师范大学</所在学校>
<所在系>信息管理</所在系>
<住址>湖北省监利县龚场镇</住址>
</学生><学生 学生学号="20043225">
<学生的姓名>阿维</学生的姓名>
<所在学校>中南民族大学</所在学校>
<所在系>经济系</所在系>
<住址>湖北省监利县周老咀镇</住址>
</学生></学生基本信息>当然,如果数据表中有多个关键字,也可以在程序中指定多个属性。
至此,一个xml文件就产生了。当然,为求程序简便,关于xml文件中的命名空间、CDATA都没有作处理。希望可以起到抛砖引玉的作用。
程序流程及逻辑可以参看类中的注释~。
(-小邪(QQ:156411203,欢迎交流)-2006.7.21)。
最后补充一点,你并不需要为每一个查询结果集中的字段都指派相应的元素或属性名,而只需根据你自己的需要,为你想要储存到xml文件中的那些字段指派名称就可以了,最后,别忘记了调用designOver()函数,告诉程序表示已经指派完毕了!'注:本文转自http://bbs.xml.org.cn/dispbbs.asp?boardID=17&replyID=75002&ID=41933&skin=1
分享到:
评论

相关推荐

    将关系型数据库MySQL存储数据转换为XML文件的实现

    综上所述,将MySQL数据转换为XML文件,是解决关系型数据库数据在网络传输中的瓶颈的有效策略。通过模块化程序和接口设计,可以实现高效、安全的数据转换,同时确保数据转换方法的可扩展性和可移植性,对于提升系统间...

    将数据库的表生成XML文件

    本教程将详细讲解如何将数据库的表转换为XML文件,以便于数据共享、备份或跨系统通信。 首先,我们需要理解数据库表与XML文件的基本概念。数据库表是由行和列组成的,用于存储结构化数据。而XML则是一种标记语言,...

    一款基于java开发的把数据库里的数据转成XML文件

    标题中的“一款基于java开发的把数据库里的数据转成XML文件”揭示了这个软件工具的主要功能,即使用Java编程语言将数据库中的数据转换为XML格式的文件。在IT领域,XML(eXtensible Markup Language)是一种通用的...

    数据库数据生成xml

    在将数据库数据转换为XML的过程中,通常涉及以下步骤: 1. **连接数据库**:首先,我们需要连接到包含所需数据的数据库。这可以通过编程语言如Java、Python或PHP中的数据库驱动程序实现,例如JDBC(Java Database ...

    基于数据库表生成XML文件的程序

    标题中的“基于数据库表生成XML文件的程序”指的是一个软件工具或编程脚本,它能够从数据库中的表格数据导出并生成XML(可扩展标记语言)文件。XML是一种用于存储和传输数据的通用格式,其结构化特性使得数据在不同...

    java数据库xml驱动

    相反,当需要将XML数据导入数据库时,可以使用DOM4J解析XML文件,Jaxen处理XPath表达式,最后通过JDBC将数据写入相应的表中。 在实际开发中,为了确保XML驱动的效率和灵活性,开发者需要注意以下几点: - 选择合适...

    Java自动生成数据库表实体和mybatis接口以及xml文件

    在Java开发中,尤其在基于Oracle或MySQL数据库的项目中,使用MyBatis作为持久层框架时,手动编写数据库表的实体类、MyBatis接口和对应的XML文件是一项耗时且容易出错的工作。为了解决这个问题,开发者通常会利用代码...

    xml中的数据导入数据库

    5. **执行SQL**:通过数据库连接执行SQL语句,将数据插入到相应的表中。 6. **关闭连接**:操作完成后,记得关闭数据库连接。 在实际应用中,可能还需要考虑性能优化,例如批量插入、错误处理和事务管理等。同时,...

    sql_xml.rar_.sql文件数据表_sql to xml_xml 数据库

    然后,关于XML数据库,这是一种特殊类型的数据库,它将数据存储为XML文档。虽然在本例中我们没有直接涉及到XML数据库,但理解这个概念有助于拓宽视野。XML数据库可以提供对XML数据的高效存储和检索,它们通常支持...

    XML文件批量转换CSV文件工具.rar

    总的来说,这个“XML文件批量转换CSV文件工具”是数据处理工作流中的实用工具,尤其适用于需要将XML数据整合到电子表格或数据库中的情况。其简单易用的界面和批量处理能力,使得即使是不太熟悉编程的用户也能快速...

    JAVA实现跨数据库服务器数据导出导入功能

    2. **数据导出**: 在SQL Server端,可以编写JAVA代码来执行SQL查询,获取需要的数据,并将其存储为CSV或XML格式的文件,这是通用的数据交换格式。使用`java.sql.ResultSet`接口遍历查询结果,然后使用`...

    Java实现XML文档到word文档转换

    ### Java实现XML文档到Word文档转换的关键技术及实践 #### XML简介与应用 XML(Extensible Markup Language,可扩展标记语言)是一种标记语言,旨在定义一套规则,通过这些规则将文档划分为多个部分并对其进行标记...

    数据库中任意的表导如XML中

    本话题将深入探讨如何将数据库中的任意表导出为XML文件,同时考虑字段注释和类型判断。 首先,我们需要了解数据库的基本操作。数据库是存储和管理结构化数据的系统,常见的有Oracle、MySQL、SQL Server等。在Oracle...

    自制JAVA导出XML文件

    Java编程语言以其强大的功能和广泛的应用领域而闻名,其中之一就是处理数据并将其转换为不同的格式,如XML(可扩展标记语言)。XML是一种通用的数据交换格式,适用于存储和传输结构化数据。本篇文章将深入探讨如何在...

    javadbf.jar jdbf.jar将数据库数据直接转为dbf格式的文件

    **jdbf.jar** 可能是另一个类似的库,专门用于将Java数据库连接(JDBC)数据源的数据转换为DBF格式。这个库可能包含以下特性: 1. **JDBC兼容**:通过JDBC接口与各种类型的数据库(如MySQL、Oracle、SQL Server等)...

    xml 中连接数据库的方法

    连接数据库并处理数据通常涉及后端编程语言,这些语言会将数据转换为XML以供进一步处理或传输。在实际应用中,确保安全性和性能是至关重要的,比如使用预编译的SQL语句防止SQL注入,以及适当管理数据库连接以优化...

    XML解析和数据库连接池

    同时,也可以将数据库中的数据导出为XML文件,方便数据交换和备份。 上传的"upload.ppt"可能包含关于XML解析、JDBC和数据库连接池的详细讲解,可能涵盖了如何配置和使用这些技术,以及它们在实际项目中的应用场景和...

    mybatis的通用java-xml版逆向生成工程

    这个"mybatis的通用java-xml版逆向生成工程"是一个利用MBG来反向工程数据库,自动创建与数据库表对应的Java实体类、XML映射文件以及对应的DAO接口的项目。下面我们将深入探讨MBG的核心概念和使用方法。 1. **...

    对XML-to-SQL基本通用化转换法的探讨及实现.pdf

    因此,如何有效地将SQL数据库中的数据转换成XML格式,以及如何将XML格式的数据转换回SQL数据库,是实现数据集成和交互的关键问题。 在探讨XML-to-SQL转换方法时,需要分析不同数据库厂商提供的转换工具的优缺点。...

    使用JDBC实现XML文档到Oracle9i数据库的存取.pdf

    例如,创建一个包含XML数据的表,然后使用Java代码读取XML文件,将其内容转换为XMLType对象,并使用JDBC接口插入到数据库中。同样,也可以通过查询操作,从XMLType列中提取数据并恢复为XML格式。 总的来说,通过...

Global site tag (gtag.js) - Google Analytics