3

有一个代码可以从 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) {
               }
       }
   }
}

但是这个类只导出给定表的数据,如何保证数据是从整个数据库(即所有表)导出的,而不是从特定表导出的。也就是说,应该得到输出的 XML 文件类型:

  <database>
      <table1>
             <id> </ id>
             <Name> </ Name>
                           ...
       </ table1>

        <table2>
               ...
       </ table2>


</ database>
4

3 回答 3

2

采用:

show tables

然后遍历表格并调用您的方法getTableData()

您可能还需要考虑获取列名称:
SHOW columns FROM table

于 2012-07-08T06:18:49.900 回答
0

您可以使用它:dbsql2xml是用于将关系数据库转换(导出、转换)为分层 XML 的 Java 工具(类)。它需要 JRE 5.0、JDBC 和 SQL DBMS。“dbsql2xml”使用 XML 文档将数据库表和列映射到树 XML 的元素

于 2012-07-08T06:28:02.087 回答
0

Dbunit是一个成熟的工具,用于将数据库数据作为 XML 进行操作。

另一个用于从数据库中提取相关数据子集的工具是jailer。它还支持 dbunit XML 格式。

于 2012-07-08T08:14:35.047 回答