2015-02-05 30 views
-1

我想從特定數據庫中檢索所有表名。我試過以下代碼:如何使用jdbc從特定數據庫獲取所有表名

try { 
     DatabaseMetaData dbmd = connection.getMetaData(); 
     String[] types = {"TABLE"}; 
     ResultSet rs = dbmd.getTables(null, null, "%", types); 
     while (rs.next()) { 
      System.out.println(rs.getString("TABLE_NAME")); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

但它給出了空指針異常。

+0

準確地說** ** WHERE是它給予空指針異常? – 2015-02-05 12:45:50

+0

準確**您正在使用哪種語言? – 2015-02-05 12:46:32

+0

我正在使用Sqlite。 – nikalldway 2015-02-05 12:49:53

回答

0

嘗試以下操作:

DatabaseMetaData md = conn.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

(從這裏取:https://stackoverflow.com/a/2780375/1843508

+0

我試過了代碼,它沒有給出任何輸出。我在構造函數中調用以下代碼,並使用Sqlite數據庫。 – nikalldway 2015-02-05 12:46:50

+0

嘗試運行以下查詢(通過JDBC)並查看它是否給出結果:SELECT name FROM sqlite_master WHERE type ='table'; – 2015-02-05 12:53:12

1

下面的例子表明,該方法conn.getMetaData()將返回預期的數據。

public class Main { 

    public static void main(String[] args) throws SQLException { 
     try (Connection conn = DriverManager.getConnection("jdbc:sqlite:testdata.db"); 
       Statement stmt = conn.createStatement()) { 
      String sql = "CREATE TABLE IF NOT EXISTS TEST_TABLE" 
        + " (ID INT PRIMARY KEY  NOT NULL," 
        + " NAME   TEXT NOT NULL, " 
        + " ADDRESS  CHAR(50))"; 
      stmt.executeUpdate(sql); 

      DatabaseMetaData md = conn.getMetaData(); 
      ResultSet rs = md.getTables(null, null, "%", null); 
      while (rs.next()) { 
       System.out.printf("table name: %s%n", rs.getString("TABLE_NAME")); 
      } 
     } 
    } 
} 

產生輸出:

table name: TEST_TABLE 
+0

謝謝它工作... – nikalldway 2015-02-05 13:07:58

相關問題