Java 如何使用jdbc从特定数据库获取所有表名

Java 如何使用jdbc从特定数据库获取所有表名,java,jdbc,Java,Jdbc,我想从特定数据库中检索所有表名。我试过下面的代码 try { DatabaseMetaData dbmd = connection.getMetaData(); String[] types = {"TABLE"}; ResultSet rs = dbmd.getTables(null, null, "%", types); while (rs.next()) { System.out.println(rs.

我想从特定数据库中检索所有表名。我试过下面的代码

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();
    }
但它给出了nullpointer异常。

请尝试以下操作:

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

(取自此处:)

以下示例显示方法
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

确切地说,它在哪里给出空指针异常?确切地说,您使用的是哪种RDBMS?嗯,我不确定以前是否问过这个问题:它在哪里给出空指针异常?在swing中单击按钮时,我正在数据库中创建表。在构造函数中,我试图获取添加到数据库中的表名。在执行之后,我得到了null指针异常,但是在添加了DriverManager.getConnection(“jdbc:sqlite:testdata.db”)之后;在构造器中,我得到了输出。好的,下一次你将通过准确地解释问题所在,避免自己和其他人浪费大量时间。“WHERE”在本例中是指“在哪一行”。因此,我想在您的例子中,异常是由
connection.getMetaData()
引发的。谁会想到这一点。我已经尝试了代码,它没有给出任何输出。我正在调用构造函数中的以下代码,并且正在使用Sqlite数据库。尝试运行以下查询(通过JDBC)并查看是否给出结果:从Sqlite_master中选择name,其中type='table';