我正在尝试使用Java连接到MS Access创建的数据库,但我似乎无法管理。我正在使用ODBC,我得到了这个例外:
java.sql.SQLException:[Microsoft] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的体系结构不匹配
我的Java:
package javaapplication2;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author Owner
*/
public class JavaApplication2 {
/**
* @param args the command line arguments
*
*/
public static void main(String[] args) {
// TODO code application logic here
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String sourceURL = new String("jdbc:odbc:myDatabase");
System.out.println(sourceURL);
Connection dbConnection = DriverManager.getConnection(sourceURL,"admin","");
Statement myStmt = dbConnection.createStatement();
String query = "INSERT INTO People(ID, Name, Surname, Age, Contact, Location, Course) VALUES"
+ " (1007, 'Elroy', 'Smith', '33', 21366688, 'Somewhere', 'somecourse')";
myStmt.executeUpdate(query);
ResultSet results = myStmt.executeQuery("SELECT * FROM People");
while(results.next())
{
System.out.print(results.getString(1));
System.out.print(results.getString(2));
System.out.print(results.getString(3));
System.out.println(results.getString(4));
}
results.close();
}
catch(ClassNotFoundException cnfe)
{
System.out.println(cnfe);
}
catch(SQLException sqle)
{
System.out.println(sqle);
}
}
}
答案 0 :(得分:124)
这些都不是为我做的。我确实在MSDN上找到了答案。但有一些暗示。错误中的体系结构是指32比64位。我的解决方案是找出我的应用程序在(Access)下运行的哪个2010是32b。我通过查看任务管理器的“进程”选项卡找到了这一点,其中所有32b进程都有* 32名称的结尾。如前所述,控制面板将从此处启动 64 位版本的ODBC
c:\windows\system32\odbcad32.exe
和32位版本在这里:
c:\windows\sysWOW64\odbcad32.exe
(最容易复制并粘贴到运行对话框中)
所以我在每个相应的ODBC控制面板(AKA管理员)中设置了名称以32和64结尾的DSN,它们指向同一个东西。然后,我根据使用它的应用程序是32b还是64b来挑选/选择正确的。
答案 1 :(得分:24)
当尝试从MS-Access连接到MySQL数据库时,如果Access的位版本(32与64)不匹配,则会出现完全相同的错误
对于那些试图在64位Windows系统上将MS-Access连接到MySQL的人,我经历了纯粹的折磨,试图让它与MS-Access 2010和MS-Access 2013一起工作。最后让它工作,以下是我在此过程中学到的经验教训:
我买了一台新的Windows 7,64位笔记本电脑,我有一个依赖于使用MySQL表的MS-Access的应用程序。
我使用All In One软件包安装安装了最新版本的MySQL 5.6。这允许您一次安装数据库和ODBC驱动程序。这很好,但它安装的ODBC驱动程序似乎是64位,所以它不适用于32位MS-Access。它似乎也有点小马车 - 不确定那个。在ODBC管理器中添加新DSN时,此驱动程序显示为“Microsoft ODBC For Oracle”。我无法让这个工作。我必须安装32位,如下所述。
我以前安装了Office 2013,我认为是64位。但在检查版本(文件,帐户,关于访问)时,我发现它是32位。 Access 2010和2013都是最常见的32位版本。
我的机器是64位机器。因此,默认情况下,当您为MS-Access设置DSN,并通过控制面板,管理选项以通常的方式进入ODBC管理器时,您将获得64位ODBC管理器。你无从知晓!你无法分辨。这是一个巨大的陷阱!!无法从那里设置DSN并使其成功连接到MS Access 32位。你会得到可怕的错误:
“指定的dsn包含体系结构不匹配...”
您必须从MySQL下载并安装32位ODBC驱动程序。我使用的是版本3.5.1
您必须告诉控制面板中的ODBC管理器进行加权,而必须使用在Start,Command提示符下执行此命令显式调用32位ODBC Manager:
C:\ WINDOWS \ SYSWOW64 \ odbcad32.exe的
我在桌面上创建了一个快捷方式。在此处,使用此经理构建您的DSN。重要的一点:将它们构建为系统DSNS,而非用户DSNS!这让我绊倒了一段时间。
顺便说一句,64位版本的ODBC管理器也可以显式运行:
C:\ Windows \ System32下\ odbcad32.exe的
从MySql安装32位ODBC驱动程序后,在ODBC管理器中单击“添加”时,将看到列出的2个驱动程序。选择“MySQL ODBC 5.2 ANSI驱动程序”。我没有尝试使用UNICODE驱动程序。
就是这样。一旦在32位ODBC管理器中定义了DSN,就可以通过Access中的常规方式连接到MySQL - 外部数据,ODBC数据库,链接到数据库,选择机器数据源,以及为MySQL创建的DSN数据库将在那里。
答案 2 :(得分:8)
架构不匹配。您的JDBC驱动程序和JDK应该具有相同的体系结构。如果您使用32位驱动程序和JDK是64位,则会出现该错误。
请参阅this
修复:取决于您的架构。
如果Java是64位,则需要64位驱动程序。
答案 3 :(得分:2)
默认情况下,命令提示符已连接到System32。运行64位命令提示符,即C:\WINDOWS\SYSWOW64\CMD.EXE
。在那里,编译并运行你的java应用程序。
答案 4 :(得分:1)
要解决这个问题首先要确保你的java软件应该是32位版本,如果它是64位版本,它会显示不匹配错误,所以尝试重新安装32位java版本并执行java程序的命令c:\ windows \ sysWOW64 \ odbcad32.exe(最容易复制并粘贴到运行对话框中),你的程序肯定能够正常工作
答案 5 :(得分:1)
我看到了这个答案,它对我有用。 https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx
从驱动程序的安装程序安装ODBC驱动程序后,您可以为其定义一个或多个数据源。数据源名称(DSN)应提供数据的唯一描述;例如,Payroll或Accounts Payable。为“所有当前安装的驱动程序”定义的用户和系统数据源列在“ODBC数据源管理器”对话框的“用户DSN”或“系统DSN”选项卡中。文件DSN选项卡中列出了给定目录中的文件数据源;要显示的目录在“文件DSN”选项卡的“查找范围”框中输入。 System_CAPS_noteNote
要管理连接到64位平台下的32位驱动程序的数据源,请使用c:\ windows \ sysWOW64 \ odbcad32.exe。要管理连接到64位驱动程序的数据源,请使用c:\ windows \ system32 \ odbcad32.exe。在64位Windows 8操作系统上的“管理工具”中,“32位”和“64位ODBC数据源管理器”对话框都有图标。
如果您使用64位odbcad32.exe配置或删除连接到32位驱动程序的DSN,例如,驱动程序执行Microsoft Access(* .mdb),您将收到以下错误消息:< / p>
指定的DSN包含驱动程序和应用程序之间的体系结构不匹配
要解决此错误,请使用32位odbcad32.exe配置或删除DSN。
数据源将特定ODBC驱动程序与您要通过该驱动程序访问的数据相关联。例如,您可以创建数据源以使用ODBC dBASE驱动程序访问硬盘或网络驱动器上特定目录中的一个或多个dBASE文件。使用ODBC数据源管理器,您可以添加,修改和删除数据源,如下表所述。
答案 6 :(得分:1)
您遇到的问题可能是因为:您有Office 32位和命令提示符64位。 要解决此问题,您需要执行以下两个步骤:
使用以下命令为DSN打开ODBC管理器: C:\ WINDOWS \ Syswow64资料\ odbcad32.exe的 这将打开32位版本的ODBC数据管理器,您将看到所有数据库驱动程序。
在此之后,您需要使用以下命令打开32位命令提示符: C:\ WINDOWS \ Syswow64资料\ cmd.exe的 这将打开32位版本的命令提示符。在这个新的CMD中,请重新编译Java程序并运行程序。
希望这会有所帮助。
答案 7 :(得分:1)
有点晚了,但是因为我遇到了同样的问题,在你确切的情况下,我想我会添加我的解决方案。
我有Windows 7(64位)和Office 2010(32位)。我尝试使用无DSN连接字符串:
jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb
我尝试使用DSN连接,同时使用ODBC管理器的System32和SysWOW64版本,但这些都没有用。
最终有效的方法是将Java的位版本与Office的位版本相匹配。一旦我这样做,我可以使用DSN或DSN较少的连接模式,没有任何大惊小怪。
答案 8 :(得分:0)
如果使用32位驱动程序从64位平台进行连接,请运行可执行文件 C:\ Windows \ SysWOW64 \ odbcad32.exe并创建DSN。它会起作用。
答案 9 :(得分:0)
我认为这也会更有帮助。
用于架构未命中匹配,
我只是从32位文件C:\ Program Files(x86)\ Java \ jdk1.7.0_71复制jdk文件并将其粘贴到64位文件C:\ Program Files \ Java \ jdk1.7.0 _10,然后重命名文件以匹配您替换的文件,以避免IDE错误(netbeans)
然后你的好去。
请注意: 您应该对64位文件进行压缩,因此当您想要创建64位应用程序时,可以将其返回到其位置
答案 10 :(得分:0)
要解决这个问题首先要确保你的java软件应该是32位版本,如果它是64位版本,它会显示不匹配错误,所以尝试重新安装32位的java版本
并在命令中执行java程序
c:\windows\sysWOW64\odbcad32.exe
(最容易复制并粘贴到运行对话框中)
这个程序肯定能够运作
答案 11 :(得分:0)
我已修复错误。
按照以下步骤操作:
配置控制面板: 一个。控制面板b。管理员工具c。数据源(ODBC)
右键点击它将目标更改为\sysWOW64\odbcad32.exe
,将开头更改为r%\SysWOW64
执行它和祝你好运。适用于Windows 7以及8
如果问题仍然存在,请删除较新版本的MS-Office并仅安装MS-Office 2007
答案 12 :(得分:0)
我确实遇到过这个问题。这是由于您使用的是计算机体系结构和数据库体系结构。
如果你使用的是32位操作系统,那么一切都运行正常,因为你只能安装32位软件。当您使用64位操作系统时出现问题。
为了解决这个问题很简单 - 我花了很长时间才发现这个问题。
您无法访问数据库,因为您的64位JVM与32位JVM不同。
将数据库添加到系统中 1.控制面板 2.管理员工具 3.数据源(ODBC) 右键单击它将目标更改为 \ SYSWOW64 \ odbcad32.exe的 改变开始 R%\ Syswow64资料
然后你应该能够跑。如果您对此有任何问题,请通知我。
谢谢!
答案 13 :(得分:0)
在使用某些旧版CLASP应用程序升级到Windows 7服务器时遇到此问题。尝试在64位计算机上运行32位应用程序。
尝试将应用程序池32位兼容性设置为True和/或创建32位和64位的dsn。
从运行框中打开两个版本中的odbc数据源窗口。 C:\ WINDOWS \ Syswow64资料\ odbcad32.exe的 C:\ Windows \ System32下\ odbcad32.exe的
答案 14 :(得分:0)
使用MS Access 2010从运行Windows 7的64位笔记本电脑连接MySQL时遇到了很多麻烦。我发现上一篇文章非常有用,但仍无法使用odbc 3.5.1进行连接。正如我之前使用Connector / ODBC 5.1.13链接了一台32位机器,我下载了该版本并使用上面的说明进行设置。成功。答案似乎是尝试不同版本的Connector.odbc。
答案 15 :(得分:0)
如果您正在使用netbeans,请转到工具 - &gt; java平台,将指向c:/ programfiles / java / jdk1_7的jdk_home更改为c:programFiles(x86)/ java / jdk1_6_21
如果不可编辑 找到netbeans.cnf并按照jdk_home的说明进行更改。重新启动neatbeans及其工作原理 我有同样的问题,但我工作了。
答案 16 :(得分:0)
您是否先在控制台&gt;管理工具&gt; ODBC&gt;系统DSN中创建了DSN。 将其命名为“myDatabase”,如果我要求查找数据库/访问文件,请使用浏览选项指定路径。 一旦您成功创建了您的DSN,您就可以轻松访问您的数据库。
答案 17 :(得分:-1)
转到此链接并下载64位操作系统的ODBC驱动程序。
http://www.microsoft.com/en-us/download/details.aspx?id=13255