2011-06-14 188 views
10

有沒有人有任何關於如何將Access 2010連接到java jdbc的想法。我用這個方法,但是當我把它稱爲,這是行不通的:如何將java連接到Ms Access 2010?

public void loadDb(){ 
    try{ 
     Class.forName("sun.jdbc.JdbcOdbcDriver"); 
     File f = new File(System.getProperty("user.dir"))  
     con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Acess Driver (*.mdb, *.accdb)}; DBQ="+ f.getPath() + "//db//JavaAccess.accd","",""); 
     st = con. createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
    }catch(ClassNotFoundException e){e.printStackTrace(); 
    }catch(SQLException e){e.printStackTrace();} 
} 

//con and st are already defined 
+0

此外,你應該接受問題的答案,如果你發現它們很有用(請參閱這裏有一個勾號)和也使用upvotes。它會幫助你獲得更多答案。 – Rishabh 2011-06-14 11:32:58

+0

請注意,JDBC-ODBC Bridge已從Java 8中刪除,並且不受支持(參考:[here](http://docs.oracle.com/javase/7/docs/technotes/guides/jdbc /bridge.html)和[這裏](http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6345277))。 [UCanAccess](http://ucanaccess.sourceforge.net/site.html)是一個流行的替代方案(詳細信息[here](http://stackoverflow.com/q/21955256/2144390))。 – 2015-03-20 13:23:21

回答

8

根據msdn應該sun.jdbc.odbc.JdbcOdbcDriver。因此,更換這行代碼:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

5

創建連接

public static Connection getConnection() { 
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
     String url = "jdbc:odbc:anime"; //anime is the database 
     String username = "ipieluser"; //leave blank if none 
     String password = "ipielpassword"; //leave blank if none 
     try { 
     Class.forName(driver); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
     try { 
     return DriverManager.getConnection(url, username, password); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
    } 

如何撥打:

public static void main(String args[]) { 
try { 
    Connection conn = getConnection(); 
    Statement st = conn.createStatement(); 
    st = conn.createStatement(); 
    ResultSet rs = st.executeQuery("SELECT * FROM localTable");  

    //get and displays the number of columns 
    ResultSetMetaData rsMetaData = rs.getMetaData(); 
    int numberOfColumns = rsMetaData.getColumnCount(); 
    System.out.println("resultSet MetaData column Count=" + numberOfColumns); 

    st.close(); 
    conn.close(); 
} catch(Exception e) { 
    System.out.println(e.getMessage()); 
} 
} 
+0

嗨,我仍然無法訪問getConnection()方法,因爲它說該類型是void不能返回,另一方面,它不承認方法getConnection()在其他一些托盤。 – 2011-06-14 05:03:30

+0

聲明它公開它將工作我也編輯了代碼。 – Rishabh 2011-06-14 05:39:21

6

拼寫錯誤?也許這行:

con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Acess Driver (*.mdb, *.accdb)}; DBQ="+ f.getPath() + "//db//JavaAccess.accd","",""); 

應該

con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+ f.getPath() + "//db//JavaAccess.accd","",""); 

Access有2 C的

+0

這是運行Office 64位的64位系統的更好解決方案。您可能還需要Access數據庫引擎通過64位接口公開32位Access數據庫。 (http://www.microsoft.com/en-us/download/details.aspx?id=13255) – Barett 2012-12-21 06:42:00

0

Rishab的答覆讓我連接到我的Access數據庫。

我下面的代碼修正:

而不是

String url = "jdbc:odbc:anime"; //anime is the database 

我做

String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + "d://institute//institutedata.accdb"; 

我明確定義的驅動程序,並與路徑和擴展完整的數據庫名。

2

使用UCanAccess JDBC驅動程序:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); // can be omitted in most cases 
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<mdb or accdb file path>",user, password); 

如:

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb"); 

因此,對於你的榜樣將是

con = DriverManager.getConnection("jdbc:ucanaccess://"+f.getPath()+"/db/JavaAccess.accd")