2011-06-14 192 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")