2015-02-05 46 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

相关问题