我在这里获得了一些代码
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;。 我读了答案,但事实上,我想通过编程获得许可,有人可以帮助我吗?非常感谢你
答案 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);
}