如何使用java jdbc-odbc桥从* .mdb文件获取表名?
问题描述:
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + f.getPath() + ";";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(url);
DatabaseMetaData meta = conn.getMetaData();
ResultSet tables = meta.getTables(conn.getCatalog(), null, "TAB_%", null);
ResultSetMetaData rsMetaData=tables.getMetaData();
int count=rsMetaData.getColumnCount();
for (int i = 0; i < count; i++) {
String str=rsMetaData.getTableName(i);
System.out.println("table = " + str);
}
上面的代码有一些问题如何使用java jdbc-odbc桥从* .mdb文件获取表名?
java.sql.SQLException: [Microsoft][ODBC Driver programming manager] Invalid descriptor indexing(translate by myself from chinese)
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
at sun.jdbc.odbc.JdbcOdbc.SQLColAttributesString(JdbcOdbc.java:2674)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColAttributeString(JdbcOdbcResultSetMetaData.java:792)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getTableName(JdbcOdbcResultSetMetaData.java:466)
我想从一个mdb文件拿到表名使用JDBC-ODBC桥,只有文件路径执行SQL查询,可有人能帮助?提前。
答
第一个问题是,你是通过一个表从0集合计数,其中计数是列数迭代:
int count=rsMetaData.getColumnCount();
for (int i = 0; i < count; i++) {
如果有更多的,可以给你得到的错误列比表。
非常感谢你!我调试和发现我的代码中的变量表的大小是0.我想也许有一个问题,在函数meta.getTables()中的第三个参数,所以我将“TAB_%”更改为“%”,它可以得到所有的表名不仅仅是我想要的,而且还有像'MSysAccessObjects','MSysObjects'等系统表。我怎样才能得到实际的表名?再次感谢。 – yao
搜索DatabaseMetaData.getTables会返回一些可能有所帮助的页面。 –