【问题标题】:How to get all the table name from a specific database using jdbc如何使用 jdbc 从特定数据库中获取所有表名
【发布时间】:2015-04-05 07:43:17
【问题描述】:

我想从特定数据库中检索所有表名。我尝试了以下代码

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();
    }

但它给出了空指针异常。

【问题讨论】:

  • 准确地说是 WHERE 是否给出了空指针异常?
  • 确切地说是哪个您使用的是 RDBMS?
  • 嗯,我不确定我之前是否问过这个问题:它究竟在哪里给出了空指针异常?
  • 在摇摆中单击按钮我正在数据库中创建表。在构造函数中,我试图获取添加到数据库中的表名。执行后我得到空指针异常,但在添加 DriverManager.getConnection("jdbc:sqlite:testdata.db");在构造函数中,我得到了输出。
  • 好的,下次您将通过准确解释问题所在来节省自己和其他人的大量时间。在这种情况下,“WHERE”表示“在哪一行”。所以,我想在你的情况下,connection.getMetaData() 抛出了异常。谁会想到这一点。

标签: java jdbc


【解决方案1】:

尝试以下方法:

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

【讨论】:

  • 我已经尝试了代码,它没有给出任何输出。我在构造函数中调用以下代码,我正在使用 Sqlite 数据库。
  • 尝试运行以下查询(通过 JDBC),看看它是否会给你结果:SELECT name FROM sqlite_master WHERE type='table';
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2011-02-16
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2017-05-22
    • 2017-03-09
    • 2011-09-07
    相关资源
    最近更新 更多