如何列出所有表格'使用java中的SQL查询在MSAccess数据库文件中命名?

时间:2015-12-02 09:42:41

标签: java database ms-access jdbc-odbc

我在这里获得了一些代码

String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + f.getPath() + ";";
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    Connection conn = DriverManager.getConnection(url);
                    Statement st=conn.createStatement();
                    String query="SELECT name FROM MSysObjects WHERE Type=1 AND Flags=0";
                    ResultSet rs=st.executeQuery(query);
                    ArrayList<String> tableNames=new ArrayList<String>();
                    while(rs.next()){
                        String name=rs.getString(1);
                        tableNames.add(name);
                    }

但是有一些问题

[Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on 'MSysObjects'."

我搜索了这个问题,发现了这个:social.msdn.microsoft.com/Forums/sqlserver/en-US/…&#34; 由于MSysObjects是Access中的系统表,因此Admin用户无权读取其中的数据&#34;。 我读了答案,但事实上,我想通过编程获得许可,有人可以帮助我吗?非常感谢你

1 个答案:

答案 0 :(得分:1)

似乎Access不允许查询MSysObjects。您是否按照文章中的步骤为用户提供了足够的权限?

无论如何,JDBC还有一个自己的API,允许您读取数据库元数据:

 Connection conn = ...
 DatabaseMetaData metaData = conn.getMetaData();
 ResultSet rs = metaData.getTables(null, null, "%", null); 
 while (rs.next()) {
      String name = rs.getString(3); // see javadoc of DatabaseMetaData
      tableNames.add(name);
 }