新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Oracle, SQL Server与XML,XML在数据挖掘中的应用, PMML.
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML 与 数据库 』 → [原创]求助:抽取MYSQL数据库数据,并转换成XML数据 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3940 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]求助:抽取MYSQL数据库数据,并转换成XML数据 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     xiaochaoshou 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:12
      积分:97
      门派:XML.ORG.CN
      注册:2008/3/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiaochaoshou发送一个短消息 把xiaochaoshou加入好友 查看xiaochaoshou的个人资料 搜索xiaochaoshou在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiaochaoshou的博客楼主
    发贴心情 [原创]求助:抽取MYSQL数据库数据,并转换成XML数据

    程序代码如下:
    package jdommysql;

    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.Connection;
    //import java.sql.Date;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.List;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;

    public class T_mysqlxml {


     public static void main(String[] args) {
    //  创建一个文档
      Document mapdoc=null;
      //定义一个新的文档
      Document datadoc=null; 
      //创建一个新的文档
      Document newdoc=null;  
         try {
          //构造文档对象
          SAXBuilder sb=new SAXBuilder(); //SAXBuilder类,一般用于文档的创建工作
       mapdoc=sb.build("XMLOFMYSQL/mapmysql.xml");//根据映射文件maporaxs.xml创建mapdoc文档
      }
      catch (JDOMException e) {
       e.printStackTrace();
      }
      catch (IOException e) {
       e.printStackTrace();
      }     
      //获取根元素
      Element maproot=mapdoc.getRootElement();
      
      int ListSize;  
      
            List TableList=maproot.getChildren("data");//将表的名称存入到TableList中     
            
            ListSize=TableList.size();           
            
      Element mapdatabase=maproot.getChild("database"); 
      
       String drivername=mapdatabase.getAttributeValue("drivername"); 
       
      String URL=mapdatabase.getAttributeValue("urlname"); 
      
      String username = mapdatabase.getAttributeValue("username"); 
      
      String password = mapdatabase.getAttributeValue("password"); 
      
      Connection con=null; 
      
      try {
       Class.forName(drivername);
       
       con=DriverManager.getConnection(URL,username,password);   
      }
      catch (ClassNotFoundException e) {
       
       System.out.println("Error creating class: "+e.getMessage());
      }
      catch (SQLException e) {
       
       System.out.println("Error creating connection: "+e.getMessage()); 
      }  
      //create the statement object
      Statement st=null;
      //create the resultset object
      ResultSet rt=null;
      //create the resultmetadata object
      ResultSetMetaData rsmd=null;
      
      Element tableelement;   
         //定义一个根元素
         datadoc= new Document(new Element("XmlInformationOfMysqlTable"));
         
         try{
          
         for(int i=0;i<ListSize;i++) {  
          
          tableelement=(Element)TableList.get(i);
          
       String listname=tableelement.getAttributeValue("tablename");
       //从TableList中依次取出每个表,然后用SELECT查询表中的所有字段      
                String SQL="SELECT * FROM"+" "+listname;      
                
                if (tableelement.getAttributeValue("condition").isEmpty()) { 
                 
          }
          else {
           
           SQL=SQL+" where "+tableelement.getAttributeValue("condition");
          }      
          System.out.println(SQL);
                //将表名作为元素名
                Element TableElement = new Element(tableelement.getAttributeValue("tablename"));
                
                st=con.createStatement();
                
       rt=st.executeQuery(SQL); //执行查询
       
                rsmd = rt.getMetaData();//获取元数据,如属性名等
                
                int colcount = rsmd.getColumnCount();//获取属性列的个数
                
                while (rt.next()) {
                 
                    Element RowElement = new Element("ROW");
                    //每一个元组构成一个元素“ROW”,“ROW”中的子元素就是元组中的属性
                    //取出元组中的每一个属性名和属性的取值
                    //属性名作为元素名,属性的取值作为元素的内容
                    for (int j = 1; j <= colcount; j++) {
                     
                        Element TempElement=new Element(rsmd.getColumnName(j).toString());
                        
                        TempElement.setText(rt.getString(j));
                        
                        RowElement.addContent(TempElement);
                    }
                    //将每一个“ROW”元素作为以表名作为元素名元素的子元素
                    TableElement.addContent(RowElement);
                }     
                //添加到根元素中
                datadoc.getRootElement().addContent(TableElement);
         }
         }
         catch (SQLException e) {
          
       System.out.println("SQL Error: "+e.getMessage());    
      }   
      finally{
       
       System.out.println("Closing connections......");
       
       try {
        con.close();    
       }
       catch (SQLException e) {
        
        System.out.println("Can't close connection"); 
       }
      }
      
      List tablelist=maproot.getChildren("table");//取得映射文件中table元素的个数
      
      String newrootword=maproot.getChild("root").getAttributeValue("name"); 
      
      newdoc= new Document(new Element(newrootword));  
      
      Element newrow,newrowlist,tableelement1,tableelement2;  

      String maprow = null,maprowlist = null;  
      
      List rowlist = null;
      
      for(int i=0;i<tablelist.size();i++){ 
       
       tableelement1=(Element)tablelist.get(i); //取得table元素中的表
       
       String listname=tableelement1.getAttributeValue("row");
       
       tableelement2=(Element)TableList.get(i); //取得data元素中的表
       
       if(listname.equals(tableelement2.getAttributeValue("tablename"))){ 
        
           rowlist=tableelement1.getChildren();
           
        maprow=tableelement1.getAttributeValue("row"); 
        
           maprowlist=tableelement1.getAttributeValue("rowname");
           //break;       
       }
       newrow=new Element(maprow); 
       
          Element dataroot=datadoc.getRootElement();
          
          List oldlist=dataroot.getChildren();//取得dataroot中的表  
          
          Element dataelement1=(Element)oldlist.get(i); //取得dataroot中的第一个表 
          
          List oldlist1=dataelement1.getChildren();//取得T_XUESHENG中的子元素,即5个ROW元素 
          
           for(int j=0;j<oldlist1.size();j++){
            
            Element dataelement=(Element)oldlist1.get(j);
            
            newrowlist=new Element(maprowlist);
            
           for(int k=0;k<rowlist.size();k++){   
            
            Element mapelement=(Element)rowlist.get(k);
            
            String mapcontent=mapelement.getChild("content").getText();
           
            String datacontent=dataelement.getChild(mapcontent).getText().toString();          
        
            String elementname=mapelement.getAttributeValue("name");
               
               Element newcolumn=new Element(elementname);
               
               newcolumn.setText(datacontent);           
               
               newrowlist.addContent(newcolumn);
           }       
           //把列元素添加到一个newrow中
           newrow.addContent(newrowlist);
          }         
          newdoc.getRootElement().addContent(newrow);
      }
      
      
         try {    
       Format format = Format.getCompactFormat();

          format.setEncoding("gb2312");           //设置xml文件的字符为gb2312
             
          format.setExpandEmptyElements(true); //设置输出空元素为<sample></sample>格式

          format.setIndent("    ");               //设置xml文件的缩进为4个空格
             
          XMLOutputter output = new XMLOutputter(format);
          
          output.output(mapdoc, new FileOutputStream("XMLOFMYSQL/test1.xml")); //输出XML文档
          
          output.output(datadoc, new FileOutputStream("XMLOFMYSQL/test2.xml")); //输出XML文档 
          
          output.output(newdoc, new FileOutputStream("XMLOFMYSQL/test3.xml")); //输出XML文档     

             
          System.out.print("XML 文档生成完毕!");
      }
      catch (FileNotFoundException e) {
       e.printStackTrace();
      }
      catch (IOException e) {
       e.printStackTrace();
      }


     }

    }
    在编译的时候报错:Exception in thread "main" java.lang.NullPointerException
     at jdommysql.T_mysqlxml.main(T_mysqlxml.java:206)
    报错里面的206也就是
    String datacontent=dataelement.getChild(mapcontent).getText().toString();这行。请各位指点


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/29 21:31:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML 与 数据库 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/1 17:07:46

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms