首页 > 代码库 > 在64位环境下Java连接Access2010的问题与解决

在64位环境下Java连接Access2010的问题与解决

整理下思路,包括出现的问题及解决方案

Java连接Access的方法

1 ODBC桥接方法,就是在控制面板“ODBC数据源(32位或64位)”那里设置DSN,百度一下,一大堆设置方法,以及什么wow64下设置兼容32位之类的东西,这里设置的数据源名称acc,连接到Dc.accdb数据库。

主要代码:String url ="jdbc:odbc:acc";

2 直接连接access不使用ODBC数据源,这个就是直接写代码

主要代码:String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=d:\\c.accdb";

全部代码:

 

环境(失败):

系统:win8  X64

Myeclips10 (自带JDK)

Access2010  X86

 

不管哪种方法都是一直不成功

总是提示:[ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序,或是其他的错误

网上很多都在解释ODBC方式,是因为64位操作系统和32Access的原因,然后出现了要找到wow64下的ODBC,然后设置,这些我也都试过了,也不成功。最后根据一位网友提示,找到了一篇微软的文章:http://msdn.microsoft.com/zh-cn/library/ff965871.aspx#DataProgrammingWithAccess2010_JDBCODBCExample

在下面的:使用32位和64位的ACE提供程序那里给出了详细解释


64 位的解决方案(64 位的 Access64 位的 Windows

若要实现 64 位的解决方案,您必须执行以下操作:

1. 64 位的 Windows 上部署 64 位的 Access2010

2.构建自定义的 64 位数据访问应用程序

32 位的解决方案(32 位的 Access32 位的 Windows

如果您有 32 位的应用程序,希望通过 Access 2010 继续运行它而不进行更改,则必须安装 32 位版本的 Access 2010

32 Access 2010 的工作方式与 32 Access 2007完全一样,无需对 VBA 代码、COM 加载项或 ActiveX 控件进行更改即可继续运行。

WOW64解决方案(32 位的 Access64 位的 Windows

WOW64 技术允许在 Windows 64 位的平台上执行 32 位的应用程序。可以将 32位的 Access 2010 安装在 64 位的 Windows 上。在这种情况下,您的数据应用程序必须是 32 位才能与 ACE 提供程序通信。这是 64 Windows 操作系统上的默认安装,可提供与 32 Office 应用程序的兼容性。

    尽管 32 位的应用程序能够以透明方式运行,但是不支持在同一进程中混合使用两种类型的代码。64 位的应用程序不能针对 32 位的系统库 (DLL) 进行链接,同样 32 位的应用程序也不能针对 64 位的系统库进行链接


    也就是说如果你的系统64位的,不管是win7,win8,如果Access32位的,那么你的myeclipsJDK也必须是32位的(我是这么理解的)

早就忘了自己装的是多少位的了,

System.out.println(System.getProperty("sun.arch.data.model"));

测试是64位的,随后在重装的问题上,我选择了重装office,重装了64office,一切问题迎刃而解,不管是ODBC去连接还是直接连接,都成功


所以现在的环境是

系统win8  X64  myeclips10  X64 Access2010  X64

另外两种环境没有去测试

就是win8  X 64   myeclips10 32  JDK  32  Access2010  X86

或者全是32位的

 

全部代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class conn1 {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
  try{
   Class.forName(driver);
   String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=d:\\c.accdb";
   //String url ="jdbc:odbc:acc";
   Connection con = DriverManager.getConnection(url);
   if(!con.isClosed()){
    System.out.print("连接成功!");
   }
  }catch(ClassNotFoundException e){
   e.printStackTrace();
  }catch(SQLException e){
   e.printStackTrace();
  }
 }
}


本文出自 “爱技术 更爱吃焖面” 博客,请务必保留此出处http://zynet.blog.51cto.com/777851/1570462

在64位环境下Java连接Access2010的问题与解决