如何在Java中从整个数据库中导出数据?

时间:2012-07-08 06:14:39

标签: java sql xml database

有一个代码可以在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>

3 个答案:

答案 0 :(得分:2)

使用:

show tables

然后循环遍历表并调用方法getTableData()

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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