我正在尝试使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pec*_*ill 127
这些都不是为我做的.我确实在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来挑选/选择正确的一个.
小智 26
当Access的位版本(32与64)不匹配时,尝试从MS-Access连接到MySQL数据库时会出现同样的错误
对于那些试图在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数据库将在那里.
架构不匹配.您的JDBC驱动程序和JDK应该具有相同的体系结构.如果你使用32位驱动程序和你的JDK是64位,你会得到这个错误.
看到这个
修复:取决于您的架构.
如果Java是64位,则需要64位驱动程序.
下载:http://www.microsoft.com/downloads/details.aspx?familyid = C06B8369-60DD-4B64-A44B- 84B371EDE16D& displaylang = en
| 归档时间: |
|
| 查看次数: |
332135 次 |
| 最近记录: |