2010-10-19 45 views
1

感興趣的如何以編程方式執行此操作,而不是一次導出表數據(有確定的工具)。最簡單的方法將mysql表「按原樣」轉換爲xml文檔?

將mysql表「按原樣」轉換爲xml文檔的最簡單方法?

表包含說2行: ID名稱 1「約翰·特拉沃爾塔」 2「瑪麗·林奇」

理想我們需要一類是會吃登錄/ PASSW /主機數據庫和

GoodClass goodClass = new GoodClass(login, passw, host); 
    String xml = goodClass.getTableData(nameOfTable); 

// xml : <table><row><num>1</num><id>1</id><name>John Travolta</name></row><row><num>2</num><id>2</id><name>Mary Lynch</name></row></table> 

回答

2

如果您想過度使用,可以使用hibernate將數據庫結果作爲Java對象,然後使用JAXB或JiBX將對象編組爲XML。但最簡單的方法是連接到數據庫,執行查詢,遍歷結果集並構建XML。示例代碼如下所示:

public class DataExtractor{ 

    private final String login, passwd, host; 

    public DataExtractor(String login, String passwd, String host){ 
     this.login = login; 
     this.passwd = passwd; 
     this.host = host; 
    } 

    public String getTableData(String tableName) throws SQLException, ClassNotFoundException { 
     Connection con = null; 
     Statement st = null; 
     ResultSet rs = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:mysql:///" + host, login, passwd); 

      st = con.createStatement(); 
      rs = st.executeQuery("select * from " + tableName); 

      ResultSetMetaData rsmd = rs.getMetaData(); 
      int colCount = rsmd.getColumnCount(); 

      StringBuilder b = new StringBuilder("<table>\n"); 

      int num = 1; 
      while (rs.next()) { 
       b.append("<row>"); 
       b.append("<num>").append(num++).append("</num>"); 
       for (int i = 1; i <= colCount; i++) { 
        String columnName = rsmd.getColumnName(i); 
        b.append('<').append(columnName).append('>'); 
        b.append(rs.getObject(i)); 
        b.append("</").append(columnName).append('>'); 
       } 
       b.append("</row>\n"); 
      } 
      b.append("</table>"); 
      return b.toString(); 
     } catch (SQLException e) { 
      throw e; 
     } catch (ClassNotFoundException e) { 
      throw e; 
     } finally { 
      if (rs != null) 
       try { 
        rs.close(); 
       } catch (SQLException e) { 
       } 
      if (st != null) 
       try { 
        st.close(); 
       } catch (SQLException e) { 
       } 
      if (con != null) 
       try { 
        con.close(); 
       } catch (SQLException e) { 
       } 
     } 
    } 
} 
1

把問題分解成塊:

  1. 查詢你想要的數據。
  2. 將ResultSet編組爲XML流。

安全性應該是一個單獨的問題。

2

最簡單的方法是使用JDBC連接到數據庫(使用傳入的登錄信息),然後使用DatabaseMetaData類獲取表(這將是類似於「」或「」的標籤)(或者在查詢表後可以使用ResultSetMetaData),然後只需一個「select * from」就可以獲得數據,而一個簡單的while循環使用ResultSet.next ()作爲你的條件將得到你的數據。

我會發布代碼片段,但這種聽起來像是作業問題,如果是這樣,我不想從學習體驗中消失。

相關問題