在这里依赖一个类DatabaseMetaData,这个对象可以从数据库连接来获取。有了它万事大吉了,想知道什么问它即可:

//获取所有表
        ResultSet tableSet = databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"});

//获取所有列

ResultSet columnSet = dbmt.getColumns(null, "%", tableName, "%");

//获取列个数

int numberOfColumns = rsmd.getColumnCount();

 

下面就是如何从数据库读取表信息了。

引入 jdom2的相关JAR文件,数据库自己选择(这里我用的是PostgreSQL数据库)

//数据库连接

public class DataBaseUtil {

    private static Connection conn = null;

 

    @SuppressWarnings("unchecked")

    public static Connection getConn() throws ClassNotFoundException, SQLException

    {

     

      if (conn==null)

      {

         Class.forName("org.postgresql.Driver");

        String url = "jdbc:postgresql://localhost:5432/postgis" ;

        conn = DriverManager.getConnection(url, "postgres" , "12345" );

 

      }

      return conn;

    }

 

}

 

 

//生成XML格式

import java.sql.DatabaseMetaData;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

 

import org.jdom2.Document;

import org.jdom2.Element;

import org.jdom2.output.XMLOutputter;

 

 

public class getDBStructure {

 

    /**

     * @param args

     * @throws SQLException

     * @throws ClassNotFoundException

     */

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

       // TODO Auto-generated method stub

 

       DataBaseUtil db = new DataBaseUtil();

       DatabaseMetaData dbmt;

        

     

       dbmt = db.getConn().getMetaData();

        

       Statement st = db.getConn().createStatement();

        

       ResultSet tableSet = dbmt.getTables(null, "%", "%", new String[]{"TABLE"});

        

       Element root = new Element("POSTGIS_DB_XML"); 

        root.setAttribute("VERSION","1.0");

       Document Doc = new Document(root);

        Element elements = new Element("Tables"); 

        Element elementtable =null;

       while (tableSet.next()){

          

          

           String tableName = tableSet.getString(3); //获取数据库中表名称

            

           elementtable = new Element("table"); 

           elementtable.setAttribute("tableName",tableName );

          

           ResultSet columnSet = dbmt.getColumns(null, "%", tableName, "%");

           ResultSetMetaData rsmd = columnSet.getMetaData();

           int numberOfColumns = rsmd.getColumnCount();//表中列个数

           Element elementcolumn =null;

          

            while(columnSet.next()){

 

              String columnName = columnSet.getString("COLUMN_NAME");//获取列名称

    String TYPE_NAME = columnSet.getString("TYPE_NAME"); //列字段类型

               

              elementcolumn = new Element("column"); 

              elementcolumn.setAttribute("columnName", columnName);

              elementcolumn.setAttribute("TYPE_NAME", TYPE_NAME);

 

              elementtable.addContent(elementcolumn);

           }

            

            elements.addContent(elementtable);

       }

      

        root.addContent(elements);

        XMLOutputter XMLOut = new XMLOutputter(); 

        String xml = XMLOut.outputString(Doc);

        System.out.println(xml);

 

        

    }

}