지정한 DSN에 드라이버와 응용 프로그램 간의 아키텍처가 일치하지 않습니다.자바
Java를 사용하여 MS Access에서 만든 데이터베이스에 접속하려고 하는데 관리가 되지 않는 것 같습니다.ODBC를 사용하고 있는데 다음과 같은 예외가 발생합니다.
java.sql.SQLException: [Microsoft][ODBC 드라이버 매니저]지정한 DSN에 드라이버와 애플리케이션 간의 아키텍처 불일치가 있습니다.
마이 자바:
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);
}
}
}
이것들 중 어느 것도 내게는 효과가 없었다.MSDN에서 답을 찾았어요.힌트는 있었어요.에러의 아키텍처는 32비트와 64비트를 나타내고 있습니다.저의 해결책은 2010년 32b에서 어떤 앱이 실행되고 있는지 알아내는 것이었습니다.태스크 매니저의 [프로세스(Process)]탭에서 모든 32b 프로세스의 이름 끝에 *32가 붙어 있는 것을 확인했습니다.전술한 바와 같이 제어판은 여기서부터64비트 버전의 ODBC를 기동합니다.
c:\windows\system32\odbcad32.exe
32비트 버전은 다음과 같습니다.
c:\windows\sysWOW64\odbcad32.exe
할 수 (복사하여 실행 대화상자에 붙여넣기 할 수 있습니다.)
같은 것을 가리키는 대응하는 각 ODBC 제어판(일명 Administrator)에서 32와 64로 끝나는 이름의 DSN을 셋업했습니다.그리고 그것을 사용하는 앱이 32b인지 64b인지에 따라 올바른 것을 골랐습니다.
액세스의 비트 버전(32 대 64)이 일치하지 않을 때 MS-Access에서 MySQL 데이터베이스에 연결하려고 할 때 동일한 오류가 발생합니다.
- 사용 중인 ODBC 드라이버의 비트 버전
- 설정하는 데 사용한 ODBC Manager의 비트 버전.
MS-Access를 64비트 Windows 시스템에서 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비트 버전을 설치해야 했습니다.
- 설치 후 MySQL은 정상적으로 동작하고 있었습니다.MySQL 데이터베이스를 정상적으로 복원했습니다.MS-Access를 사용하여 연결합니다.
이전에 Office 2013을 설치한 적이 있는데, 64비트인 줄 알았어요.그러나 버전(File, Account, About Access)을 확인해보니 32비트입니다.Access 2010과 2013 모두 일반적으로 32비트 버전으로 판매됩니다.
내 기계는 64비트 기계이다.기본적으로 MS-Access용 DSN을 설정하고 일반적인 방법으로 제어판의 관리 옵션을 통해 ODBC Manager로 이동하면 64비트 ODBC Manager가 표시됩니다.당신은 그걸 알 길이 없어요!넌 그냥 모를 뿐이야.이거 대박이다!!여기서 DSN을 설정하여 MS Access 32비트에 정상적으로 접속할 수 없습니다.끔찍한 오류가 발생합니다.
"지정된 DSN에 아키텍처가 일치하지 않습니다.."
MySQL에서 32비트 ODBC 드라이버를 다운로드하여 설치해야 합니다.버전 3.5.1을 사용했습니다.
제어판의 ODBC Manager에 하이킹을 지시하고 대신 Start, Command 프롬프트에서 다음 명령을 실행하여 32비트 ODBC Manager를 명시적으로 호출해야 합니다.
c:\windows\sysWOW64\odbcad32.실행
바탕화면에 바로 가기를 만들었습니다.여기서부터 이 매니저를 사용하여 DSN을 구축합니다.중요한 점: 사용자 DSNS가 아닌 시스템 DSNS로 구축하십시오!이것에 잠시 당황했습니다.
참고로 ODBC Manager의 64비트 버전은 다음과 같이 명시적으로 실행할 수도 있습니다.
c:\windows\system32\syslogad32.실행
MySql에서 32비트 ODBC 드라이버를 설치한 후 ODBC 관리자에서 추가를 클릭하면 두 개의 드라이버가 나열됩니다."MySQL ODBC 5.2 ANSI 드라이버"를 선택합니다.UNICODE 드라이버는 시험하지 않았다.
안 되겠군.32비트 ODBC 관리자에서 DSN을 정의한 후에는 액세스 - 외부 데이터, ODBC 데이터베이스, 데이터베이스 링크에서 일반적인 방법으로 MySQL에 연결할 수 있습니다. 그러면 시스템 데이터 소스를 선택하면 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
이 문제를 해결하려면 먼저 Java 소프트웨어가 64비트 버전인 경우 32비트 버전이어야 합니다.그 때문에, 32비트의 Java 버전을 재인스톨 해 주세요.그리고 c:\windows\sys 명령어로 Java 프로그램을 실행합니다.WOW64\odbcad32.exe(복사하여 실행 대화상자에 붙여넣기 가장 간단)로 프로그램이 충분히 작동합니다.
나는 이 답을 보았고 그것은 나에게 효과가 있었다.https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx
드라이버 셋업 프로그램에서 ODBC 드라이버를 인스톨 한 후, ODBC 드라이버의 데이터 원본을 1개 이상 정의할 수 있습니다.데이터 원본 이름(DSN)은 Payroll 또는 Accounts Payable과 같이 데이터에 대한 고유한 설명을 제공해야 합니다.현재 설치된 모든 드라이버에 대해 정의된 사용자 및 시스템 데이터 소스가 ODBC 데이터 소스 관리자 대화상자의 사용자 DSN 또는 시스템 DSN 탭에 나열됩니다.지정된 디렉토리의 파일 데이터 소스가 파일 DSN 탭에 나열됩니다.표시할 디렉토리는 파일 DSN 탭의 검색 위치 상자에 입력됩니다.시스템_CAPS_주의
64비트 플랫폼에서 32비트 드라이버에 접속하는 데이터 소스를 관리하려면 c:\windows\sys를 사용합니다.WOW64\odbcad32.exe.64비트 드라이버에 접속하는 데이터 소스를 관리하려면 c:\windows\system32\odbcad32.exe 를 사용합니다.64비트 윈도우즈 8 운영 체제의 관리 도구에는 32비트 및 64비트 ODBC 데이터 원본 관리자 대화 상자 아이콘이 있습니다.
64비트 odbcad32.exe를 사용하여 32비트 드라이버에 연결하는 DSN(예: Driver do Microsoft Access(*.mdb))을 구성하거나 제거하면 다음 오류 메시지가 표시됩니다.
지정한 DSN에 드라이버와 애플리케이션 간의 아키텍처 불일치가 있습니다.
이 오류를 해결하려면 32비트 odbcad32.exe를 사용하여 DSN을 구성하거나 제거하십시오.
데이터 원본은 특정 ODBC 드라이버를 해당 드라이버를 통해 액세스할 데이터와 연결합니다.예를 들어 ODBC dBASE 드라이버를 사용하여 하드 디스크 또는 네트워크 드라이브의 특정 디렉토리에 있는 하나 이상의 dBASE 파일에 액세스하는 데이터 소스를 생성할 수 있습니다.ODBC 데이터 원본 관리자를 사용하여 다음 표에 설명된 대로 데이터 소스를 추가, 수정 및 삭제할 수 있습니다.
기본적으로 명령 프롬프트는 System32에 연결되어 있습니다. 프롬프트를 프롬프트C:\WINDOWS\SYSWOW64\CMD.EXE
여기서 Java 어플리케이션을 컴파일하여 실행합니다.
이 문제는 Office 32비트와 명령 프롬프트 64비트를 사용하고 있었기 때문일 수 있습니다.문제를 해결하려면 다음 2단계를 수행해야 합니다.
C:\Windows\Sys를 사용하여 DSN용 ODBC Manager를 엽니다.WOW64\odbcad32.exe 32비트 버전의 ODBC 데이터 관리자가 열리고 모든 데이터베이스 드라이버가 표시됩니다.
그런 다음 C:\Windows\Sys를 사용하여 32비트 명령 프롬프트를 열어야 합니다.WOW64\cmd.exe 32비트 버전의 명령 프롬프트가 열립니다.이 새로운 CMD에서 Java 프로그램을 다시 컴파일하고 프로그램을 실행하십시오.
이게 도움이 되길 바라.
조금 늦었지만, 같은 문제에 부딪혔기 때문에, 당신의 정확한 시나리오에서, 저는 제 해결책을 추가하려고 합니다.
Windows 7(64비트)과 Office 2010(32비트)을 사용하고 있습니다.DSN-less 연결 문자열을 사용하여 시도했습니다.
jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb
System32 버전과 SysWOW64 버전의 ODBC Admin을 사용하여 DSN 연결을 시도했지만 모두 작동하지 않았습니다.
결국 효과가 있었던 것은 Java의 비트 버전과 Office의 비트 버전을 일치시키는 것이었습니다.이렇게 하면 DSN 또는 DSN less connection 모드 중 하나를 문제없이 사용할 수 있습니다.
먼저 제어판>관리도구>에서 DSN을 작성했습니까?ODBC > 시스템 DSN. "my Database"와 같은 이름을 붙입니다.데이터베이스/액세스 파일의 위치를 확인하는 경우는, 브라우즈 옵션을 사용해 패스를 지정합니다.DSN이 정상적으로 생성되면 DB에 쉽게 액세스할 수 있습니다.
netbeans를 사용하는 경우 tools-> java Platform으로 이동하여 c:/programfiles/java/jdk1_7을 가리키는jdk_home을 c:programFiles(x86)/java/jdk1_6_21로 변경합니다.
편집할 수 없는 경우 netbeans.cnf를 찾아 jdk_home에 대해 지정된 대로 변경합니다.restart neatbeans 그리고 그것이 어떻게 작동하는지 나는 같은 문제를 가지고 있었습니다, 그러나 나는 일했습니다.
MS Access 2010을 사용하여 Windows 7을 실행하는 64비트 노트북에서 MySQL에 링크하는 데 많은 어려움을 겪었습니다.이전 글은 매우 도움이 되었지만 여전히 odbc 3.5.1을 사용하여 연결할 수 없었습니다.이전에 Connector/ODBC 5.1.13을 사용하여 32비트 머신을 링크했었기 때문에 위의 절차에 따라 버전을 다운로드하여 셋업하였습니다.성공.정답은 Connector.odbc의 다른 버전을 사용해 보는 것입니다.
32비트 드라이버를 사용하여 64비트 플랫폼에서 접속하는 경우 실행 파일 C:\Windows\SysWOW64\odbcad32.exe를 사용하여 DSN을 만듭니다.그건 작동할 것이다.
레거시 CLACB 애플리케이션을 탑재한 Windows 7 서버로 업그레이드 할 때 이 문제가 발생했습니다.64비트 시스템에서 32비트 응용 프로그램을 실행하려고 합니다.
응용 프로그램 풀의 32비트 호환성을 True로 설정하거나 32비트 및 64비트 DSN을 만듭니다.
실행 상자에서 두 버전의 odbc 데이터 원본 창을 엽니다.C:\Windows\SysWOW64\odbcad32.exe C:\Windows\system32\odbcad32.실행
이 링크로 이동하여 64비트 OS용 ODBC 드라이버를 다운로드합니다.
http://www.microsoft.com/en-us/download/details.aspx?id=13255
저는 이 문제에 직면했습니다.이는 컴퓨터 아키텍처와 사용 중인 데이터베이스 아키텍처 때문입니다.
32비트 운영체제를 사용하는 경우 32비트 소프트웨어만 설치할 수 있기 때문에 모든 것이 잘 작동합니다.64비트 운영체제를 사용하고 있을 때 문제가 발생합니다.
이 문제를 해결하는 방법은 간단합니다.이 문제를 발견하는 데 오랜 시간이 걸렸습니다.
- 운영체제는 64비트이지만 Microsoft Office는 32비트임을 인식한다.
- 따라서 NetBean IDE를 사용하여 데이터베이스에 액세스하려면(이를 사용하는 것으로 가정), 32비트 JDK를 설치해야 합니다.64비트를 인스톨 하고 있는 경우는, 언인스톨 해, 32비트를 인스톨 할 필요가 있습니다.
64비트 JVM이 32비트 JVM과 다르기 때문에 데이터베이스에 액세스할 수 없습니다.
시스템 1에 데이터베이스를 추가합니다.제어판 2관리자 도구 3데이터 소스(ODBC) 오른쪽 버튼을 클릭하면 타겟이 \sys로 변경됩니다.WOW64\odbcad32.exe 시작점을 r%\Sys로 변경합니다.WOW64
그럼 도망칠 수 있을 거야이것에 대해 무슨 문제가 있으면 알려주세요.
감사해요!
오류를 수정했습니다.
다음의 순서에 따릅니다.
- 32bt 버전의 JDK 설치
- MS-Office 2007 설치
제어판 구성 : a. 제어판 b.관리자 도구 c.데이터 소스(ODBC)
마우스 오른쪽 버튼을 클릭하여 타겟을 변경하다
\sysWOW64\odbcad32.exe
의 시작을 로 바꾸다r%\SysWOW64
실행해서 행운을 빌어요.Windows 7 및8에서 동작
새로운 버전의 MS-Office를 삭제하고 문제가 해결되지 않으면 MS-Office 2007만 설치합니다.
이 문제를 해결하려면 먼저 Java 소프트웨어가 64비트 버전인 경우 32비트 버전이어야 합니다. 불일치 오류를 명확하게 나타내므로 Java 버전의 32비트를 재설치하고 다음 명령으로 Java 프로그램을 실행해 보십시오.c:\windows\sysWOW64\odbcad32.exe
(복사하여 실행 대화 상자에 붙여넣기 가능) 이 정도면 충분합니다.
이것도 도움이 될 것 같아요.
아키텍처 미스 매치,
32비트 파일 C에서 jdk 파일을 복사하기만 하면 됩니다.\Program Files (x86)\Java\jdk1.7.0_71을 64비트 파일 C에 붙여넣습니다.\Program Files\Java\jdk1.7.0_10에서 IDE 오류(netbeans)를 피하기 위해 파일 이름을 바꾼다.
그럼 가도 돼
주의: 64비트 파일을 백업해야 합니다.그러면 64비트 응용 프로그램을 만들고 싶을 때 해당 응용 프로그램을 원래 위치로 되돌릴 수 있습니다.
언급URL : https://stackoverflow.com/questions/8895823/the-specified-dsn-contains-an-architecture-mismatch-between-the-driver-and-appli
'programing' 카테고리의 다른 글
Laravel passport: 수동으로 액세스 토큰 생성 (0) | 2022.10.26 |
---|---|
JavaScript를 사용하여 줄바꿈 문자를 포함하는 JSON 문자열을 이스케이프하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
Mysql/Maria 고유 키 표현 (0) | 2022.10.26 |
mysql_* 함수를 사용하여 MySQL 결과 세트를 여러 번 루프하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
jQuery를 사용하여 드롭다운 목록(선택 상자)에서 선택한 텍스트를 가져옵니다. (0) | 2022.10.26 |