如何将 java 连接到 Ms Access 2010?

Posted

技术标签:

【中文标题】如何将 java 连接到 Ms Access 2010?【英文标题】:How to connect java to Ms Access 2010? 【发布时间】:2011-06-14 04:27:58 【问题描述】:

有没有人知道如何将 Access 2010 连接到 java jdbc。我用这个方法,但是调用的时候就不行了:

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

【问题讨论】:

此外,如果您发现问题的答案很有用,您应该接受它们的答案(请参阅那里有一个勾号)并使用upvotes。它将帮助您获得更多答案。 请注意,JDBC-ODBC 桥已从 Java 8 中删除并且不受支持(参考:here 和 here)。 UCanAccess 是一种流行的替代方案(详情 here)。 【参考方案1】:

根据msdn 应该是sun.jdbc.odbc.JdbcOdbcDriver。所以替换这行代码:

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

【讨论】:

【参考方案2】:

拼写错误?也许这一行:

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

【讨论】:

对于运行 Office 64 位的 64 位系统来说,这是一个更好的解决方案。您可能还需要 Access 数据库引擎通过 64 位接口公开 32 位 Access 数据库。 (microsoft.com/en-us/download/details.aspx?id=13255)【参考方案3】:

创建连接

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());
 

【讨论】:

嗨,我仍然无法访问 getConnection() 方法,因为它说类型为 void 不能返回,另一方面,它不识别方法 getConnection()其他一些地方。 将其声明为公开它会起作用我也编辑了代码。【参考方案4】:

使用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")

【讨论】:

【参考方案5】:

Rishab 的回复帮助我连接到我的访问数据库。

我在代码中做了以下更正:

代替

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

我做到了

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

我用路径和扩展名明确定义了驱动程序和完整的数据库名称。

【讨论】:

【参考方案6】:

今天才遇到同样的问题,发现要检查java的版本,如果你 java的版本 如果java的版本在7以上,那么sun.jdbc.odbc.JdbcOdbcDriver将不被支持,所以只需检查java的版本。

【讨论】:

以上是关于如何将 java 连接到 Ms Access 2010?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MS ACCESS 连接到 Android 应用程序

将 sqlalchemy 连接到 MS Access

连接到 ODBC 时出现 MS Access 错误

如何将 .NET Core ASP 应用程序连接到 MS Access 数据库

将 asp.net web 表单连接到 ms access 数据库

无法从 Java WebService 连接到 MS Access 数据库