2016-10-30 29 views
1

.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ユーザーが権限を持たないか、オブジェクトが見つかりません:net.ucanaccess.jdbc.UcanaccessStatement.executeQueryでMSYSOBJECTS (UcanaccessStatement.java:211 )

答えて

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); 
    } 
} 
+0

おかげ 正確なコードは RS = connChem.getMetaData()だったのgetTables(NULL、NULL、 "%" は、null)。 while(rs.next()){ String id = rs.getString(3); } – Matt

関連する問題