【问题标题】:list the tables in a database列出数据库中的表
【发布时间】:2017-03-12 19:29:29
【问题描述】:

试图获取 .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)

【问题讨论】:

    标签: java sql ms-access jdbc ucanaccess


    【解决方案1】:

    您不需要点击 [MSysObjects] 表。您可以通过DatabaseMetaData#getTables 方法获取表格列表,例如,

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

    【讨论】:

    • 谢谢 工作的确切代码是 rs = connChem.getMetaData().getTables(null, null, "%", null); while (rs.next()) { String id = rs.getString(3); }
    猜你喜欢
    • 2021-03-22
    • 2013-08-03
    • 2020-04-28
    • 1970-01-01
    • 2016-01-15
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多