簡體   English   中英

如何通過Java使用“顯示表​​”列出多個數據庫及其表?

[英]How do I list multiple databases with their tables by using “Show Tables” via Java?

我試圖用Java列出MySQL數據庫及其表。 現在,我有兩個數據庫,分別是帶有MySQL_Database_Service的 Database_ServicesMSSQL_Database_Service和帶有Active_Directory的 Directory_ServicesOpenLDAP表。我獲得了Database_Services及其表的輸出,但是沒有得到其他數據庫

public class connectMySQL implements serverConnection{
Connection conn;
Statement stmt;
public void connect(String dbName){
    String url;
    try {
        if(dbName.equals("")){
            url = "jdbc:mysql://x:x/";
        }
        else{
            url = "jdbc:mysql://x:x”+ dbName;
        }
        String username = “x”;
        String password = "x";
        conn =  DriverManager.getConnection(url,username,password);
        stmt = conn.createStatement();
    }
    catch (SQLException ex)
    {
        System.out.println("An error occurred. Maybe user/password is invalid");
        ex.printStackTrace();
    }
}

}

public class listInf extends connectMySQL implements listInfrastructure {
public void list() {
    String dbName;
    ResultSet rs;
    try{
        connect("");
        String str = "SHOW DATABASES";
        ResultSet resultSet = stmt.executeQuery(str);
        while(resultSet.next()){
            dbName = resultSet.getString("Database");
            if(!dbName.contains("schema") && !dbName.equals("mysql")){
                System.out.println(dbName);
                rs = stmt.executeQuery("SHOW TABLES IN " + dbName);
                while (rs.next()) {
                    System.out.println("\t" + rs.getString("Tables_in_" + dbName));
                }
            }
        }
    }
    catch(SQLException e){
        System.out.println("Error");
    }
}

}

我想得到類似的輸出:

Database_Services:

  1. MySQL_Database_Service。
  2. MSSQL_Database_Service。

Directory_Services:

  1. Active_Directory_Service。

  2. OpenLDAP_Service。

您將同Statement用於多個查詢。 你不能這樣做。 StatementJavadoc中

默認情況下,每個Statement對象只能同時打開一個ResultSet對象。 因此,如果一個ResultSet對象的讀取與另一個對象的讀取是交錯的,則每個都必須由不同的Statement對象生成。 如果存在打開的語句,Statement接口中的所有執行方法都會隱式關閉該語句的當前ResultSet對象。

Connection conn1 = DriverManager.getConnection(url, username, password);
Connection conn2 = DriverManager.getConnection(url, username, password);

Statement statement1 = conn1.createStatement();
Statement statement2 = conn2.createStatement();

ResultSet resultSet1 = statement1.executeQuery("SHOW TABLES IN DB1");
ResultSet resultSet2 = statement2.executeQuery("SHOW TABLES IN DB2");

while (resultSet1.next()) {
   System.out.println("");
}

while (resultSet2.next()) {
   System.out.println("");
}

如果您有兩個以上的數據庫,則只需使用loop即可獲取結果。

您可以使用元信息數據庫information_schema

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME 

FROM information_schema.TABLES

WHERE TABLE_SCHEMA IN ('Database_Services', 'Directory_Services')

ORDER BY TABLE_SCHEMA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM