2015-12-02 76 views
0
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

第一個問題是,你是通過一個表從0集合計數,其中計數是列數迭代:

int count=rsMetaData.getColumnCount(); 
for (int i = 0; i < count; i++) { 

如果有更多的,可以給你得到的錯誤列比表。

+0

非常感謝你!我調試和發現我的代碼中的變量表的大小是0.我想也許有一個問題,在函數meta.getTables()中的第三個參數,所以我將「TAB_%」更改爲「%」,它可以得到所有的表名不僅僅是我想要的,而且還有像'MSysAccessObjects','MSysObjects'等系統表。我怎樣才能得到實際的表名?再次感謝。 – yao

+0

搜索DatabaseMetaData.getTables會返回一些可能有所幫助的頁面。 –

相關問題