【问题标题】:How in Java to export data from the entire database?Java中如何从整个数据库中导出数据?
【发布时间】:2012-07-08 06:14:38
【问题描述】:

有一段代码以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>

【问题讨论】:

  • 您可能想查看您的 DBMS 文档。大多数都提供内置的导出功能 - 无论是 CVS、XML 还是二进制文件......

标签: java sql xml database


【解决方案1】:

用途:

show tables

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

您可能还想考虑获取列名:
SHOW columns FROM table

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-03-15
        • 1970-01-01
        • 2018-07-05
        • 2018-04-21
        • 2013-09-22
        • 2021-02-14
        • 2014-03-24
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多