java - 列出数据库中的表

标签 java sql ms-access jdbc ucanaccess

尝试获取 .accdb 数据库中所有表的列表(2007-2016 格式)。似乎无法找到 MSysObjects 表。使用 UCanAccess

sql = "SELECT Name FROM MSysObjects WHERE Type = 1 AND Flags = 0";
ResultSet rs = queryChem(sql);

public static ResultSet queryChem(String sql) throws SQLException {
    Statement sChem = connChem.createStatement();
    ResultSet rsChem = sChem.executeQuery(sql);
    return rsChem;
}

private static void connectChem() {
    try {

        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        System.out.println("Driver loaded");

        String url = "jdbc:ucanaccess://chemdb.accdb";
        connChem = DriverManager.getConnection(url);
        System.out.println("Database Connected - CHEMS");

    } catch (Exception ex) {
        System.out.println("Error");
    }
}

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 用户缺少权限或找不到对象:MSYSOBJECTS 在 net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211)

最佳答案

您不需要 Access [MSysObjects] 表。您可以通过 DatabaseMetaData#g​​etTables 方法获取表格列表,例如,

try (ResultSet rsMD = connChem.getMetaData().getTables(null, null, null, null)) {
    while (rsMD.next()) {
        String tblName = rsMD.getString("TABLE_NAME");
        System.out.println(tblName);
    }
}

关于java - 列出数据库中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40329914/

相关文章:

java - 使用更新语句创建列

java - 如何使用 Guava 将 Iterable<Map.Entry<A,B>> 转换为 Map<A,B>?

javascript - SQL查询禁用日历

c# - Entity Framework 从用户指定的表中选择

sql - SQL 查询中的 MS Access VBA 数据类型不匹配错误

java - 检查对象是否为矩阵

java - 按类型分派(dispatch)的 Clojure 多种方法

python - SQL从BEGIN中获取数据; ...;结尾; python 中的 block

java - 表达式不在聚合或 GROUP BY 列中异常

mysql - 根据季度定义添加每月值