지정된 DSN에 드라이버와 응용 프로그램 간의 아키텍처 불일치가 있습니다. 자바


86

Java를 사용하여 MS Access에서 만든 데이터베이스에 연결하려고하는데 관리 할 수 ​​없습니다. ODBC를 사용하고 있는데이 예외가 발생합니다.

java.sql.SQLException : [Microsoft] [ODBC Driver Manager] 지정된 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);
        }
    }
}

2
64 비트 jvm을 사용하고 있습니까? 그렇다면 64 비트 odbc 드라이버가 필요합니다.
dogbane

1
네, 그렇습니다. C : \ Windows \ SysWOW64에서 64 비트 버전의 odbc를 찾았지만 제어판이 켜지는 것과는 다릅니다.
user1028408

64 비트 드라이버를 설치할 수 없습니다. 다른 사무용 제품이 32 비트
이기 때문입니다

답변:


128

이들 중 어느 것도 나를 위해 해주지 않았습니다. MSDN에서 답을 찾았습니다. 그래도 힌트가있었습니다. 오류의 아키텍처는 32 비트 대 64 비트를 참조합니다. 내 솔루션은 2010이 32b 인 (Access)에서 실행되는 내 앱을 찾는 것이 었습니다. 모든 32b 프로세스의 이름 끝에 * 32가있는 작업 관리자의 프로세스 탭에서 이것을 찾았습니다. 말했듯이 제어판은 여기에서 64 비트 버전의 ODBC를 실행합니다.

c:\windows\system32\odbcad32.exe

32 비트 버전은 다음과 같습니다.

c:\windows\sysWOW64\odbcad32.exe (실행 대화 상자에 복사 및 붙여 넣기가 가장 쉬움)

그래서 동일한 것을 가리키는 각 ODBC 제어판 (AKA Administrator)에서 이름이 32와 64로 끝나는 DSN을 설정했습니다. 그런 다음 사용하는 앱이 32b인지 64b인지에 따라 올바른 것을 선택 / 선택합니다.


64 비트 버전을 시도하고 관리자 권한으로 실행했지만 작동하지 않습니다 !!
Fatima Zohra 2012

2
비트 하모니가 있어야합니다. 앱이 32 인 경우 32 비트 구성이 있어야합니다. 앱이 64 인 경우 64 인 구성이 있어야합니다. 동일한 이름으로 구성을 만들려고하지 않았습니다. 동기화가 해제되는 것을 원하지 않았기 때문입니다 (동시에 두 가지를 모두 변경하는 것을 잊지 마십시오). 제안을 제공 할 충분한 정보를 제공하지 않았습니다. 나는 당신이 그것을 이해하기를 바랍니다. (왜 그들은 그렇게 간단한 일을 한 64 비트 응용 프로그램을 만들 수를 구성하고 모두 64 개 및 32 비트 환경 ???)
페 코스 빌

그리고 아래에 언급되었지만 분명하지 않은 것처럼, 적절한 아키텍처가 아니라면 드라이버를 선택할 수 없다고 생각하지만 관련된 드라이버도 일치해야합니다 (아마도 32와 64를 모두 설치하는 것이 가장 좋습니다).
Pecos Bill

이것은 또한 32 비트 Excel이 64 비트 Cloudea Hive ODBC 드라이버를 사용하여 Hadoop Hive 서버에 연결할 수없는 이유를 해독하는데도 도움이되었습니다. 32 비트 커넥터로 전환하면 훌륭하게 작동했습니다!
Mark Vickery 2014 년

2
따라서 명확하게 말하면 64 비트 시스템에서는 일반 Windows GUI를 통해 32 비트 PostgreSQL ODBC 연결을 설정할 수 없습니다 . 대신 ODBC 데이터 원본 관리자 (현재 열려있는 경우)를 닫고 c:\windows\sysWOW64\odbcad32.exe여기에서 연결을 실행 하고 구성해야합니다. 그런 다음 나중에 32 비트 프로그램에서 해당 연결을 사용하여 데이터베이스에 액세스 할 수 있습니다.
Ajedi32

26

Access의 비트 버전 (32 대 64)이 일치하지 않을 때 MS-Access에서 MySQL 데이터베이스에 연결하려고 할 때 정확히 동일한 오류가 발생합니다.

  1. 사용중인 ODBC 드라이버의 비트 버전
  2. 설정에 사용한 ODBC Manager의 비트 버전.

64 비트 Windows 시스템에서 MS-Access를 MySQL에 연결하려는 분들을 위해 저는 MS-Access 2010과 MS-Access 2013에서 모두 작동하도록하기 위해 고문을 겪었습니다. 마침내 작동하게되었습니다. 내가 배운 교훈 :

새 Windows 7, 64 비트 노트북을 구입했는데 MySQL 테이블을 사용하는 MS-Access에 의존하는 앱이 있습니다.

  1. All In One 패키지 설치를 사용하여 최신 버전의 MySQL 5.6을 설치했습니다. 이렇게하면 데이터베이스와 ODBC 드라이버를 모두 한 번에 설치할 수 있습니다. 멋지지만 설치하는 ODBC 드라이버가 64 비트 인 것 같으므로 32 비트 MS-Access에서는 작동하지 않습니다. 또한 약간 버그가있는 것처럼 보입니다. 확실하지 않습니다. ODBC Manager에서 새 DSN을 추가하면이 드라이버가 "Microsoft ODBC For Oracle"로 나타납니다. 나는 이것을 작동시킬 수 없었다. 아래에 설명 된대로 32 비트를 설치해야했습니다.

    • MySQL은 설치 후 제대로 작동했습니다. 일반적인 방법으로 애플리케이션 MySQL 데이터베이스를 복원했습니다. 이제 MS-Access를 사용하여 연결하고 싶습니다.


  2. 이전에 64 비트라고 가정 한 Office 2013을 설치했습니다. 하지만 버전 (파일, 계정, 액세스 정보)을 확인하면 32 비트임을 알 수 있습니다. Access 2010 및 2013은 모두 일반적으로 32 비트 버전으로 판매됩니다.

  3. 내 컴퓨터는 64 비트 컴퓨터입니다. 따라서 기본적으로 MS-Access에 대한 DSN을 설정하고 제어판, 관리 옵션을 통해 일반적인 방법으로 ODBC 관리자로 이동하면 64 비트 ODBC 관리자가 표시됩니다. 당신은 그것을 알 방법이 없습니다! 당신은 말할 수 없습니다. 이것은 큰 잡았다 !! 거기에서 DSN을 설정하고 MS Access 32 비트에 성공적으로 연결하는 것은 불가능합니다. 두려운 오류가 발생합니다.

    "지정된 dsn에 아키텍처 불일치가 있습니다 ..."

  4. MySQL에서 32 비트 ODBC 드라이버를 다운로드하여 설치해야합니다. 3.5.1 버전을 사용했습니다.

    http://dev.mysql.com/downloads/connector/odbc/3.51.html

  5. 제어판에서 ODBC 관리자에게 하이킹을 요청해야하며 대신 시작, 명령 프롬프트에서 다음 명령을 실행하여 32 비트 ODBC 관리자를 명시 적으로 호출해야합니다.

    c : \ windows \ sysWOW64 \ odbcad32.exe

    내 바탕 화면에 이것에 대한 바로 가기를 만들었습니다. 여기에서이 관리자로 DSN을 구축하십시오. 중요 사항 : 사용자 DSNS가 아닌 시스템 DSNS로 구축하십시오! 이것은 잠시 나를 넘어 뜨렸다.

    참고로 64 비트 버전의 ODBC 관리자는 다음과 같이 명시 적으로 실행할 수도 있습니다.

    c : \ windows \ system32 \ odbcad32.exe

  6. MySql에서 32 비트 ODBC 드라이버를 설치 한 후 ODBC 관리자에서 추가를 클릭하면 2 개의 드라이버가 나열됩니다. "MySQL ODBC 5.2 ANSI 드라이버"를 선택합니다. UNICODE 드라이버를 사용하지 않았습니다.


그렇게됩니다. 32 비트 ODBC 관리자에서 DSN을 정의하면 Access (외부 데이터, ODBC 데이터베이스, 데이터베이스에 연결)에서 일반적인 방법으로 MySQL에 연결할 수 있으며 머신 데이터 소스를 선택하고 MySQL에 생성 한 DSN을 선택할 수 있습니다. 데이터베이스가있을 것입니다.


2
나는 당신이 두 ODBC 관리자를위한 경로 주변 전환 생각32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns을

3
@Jrgns 아니요, 전환되지 않았습니다. sysWOW64실제로 32 비트 디렉토리입니다. Windows는 헷갈리는 것을 좋아합니다. ODBC 데이터 원본 관리자의 제목 표시 줄에 (32 비트) 또는 (64 비트)가 표시되므로 사용중인 버전을 알 수 있습니다.
Tim Leaf

8

아키텍처 불일치가 있습니다. JDBC 드라이버와 JDK는 동일한 아키텍처 여야합니다. 32 비트 드라이버를 사용하고 JDK가 64 비트 인 경우 해당 오류가 발생합니다.

참조

수정 : 아키텍처에 따라 다릅니다.

Java가 64 비트 인 경우 64 비트 드라이버가 필요합니다.

다운로드 : http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en


나는 그것을 다운로드하고 지침에 지정된 새 연결 문자열을 시도했지만 여전히 작동하지 않았습니다. 내가 뭔가 잘못하고있는 것일까?
user1028408

2

나는이 대답을 보았고 그것은 나를 위해 일했습니다. 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을 구성하거나 제거하는 경우 (예 : Driver do Microsoft Access (*. mdb)) 다음 오류 메시지가 표시됩니다.

지정된 DSN에 드라이버와 응용 프로그램 간의 아키텍처 불일치가 있습니다.

이 오류를 해결하려면 32 비트 odbcad32.exe를 사용하여 DSN을 구성하거나 제거하십시오.

데이터 소스는 특정 ODBC 드라이버를 해당 드라이버를 통해 액세스하려는 데이터와 연결합니다. 예를 들어, ODBC dBASE 드라이버를 사용하여 하드 디스크 또는 네트워크 드라이브의 특정 디렉터리에있는 하나 이상의 dBASE 파일에 액세스하는 데이터 원본을 만들 수 있습니다. ODBC 데이터 원본 관리자를 사용하여 다음 표에 설명 된대로 데이터 원본을 추가, 수정 및 삭제할 수 있습니다.


안녕하세요 Bineesh 쿠마는 breafly 설명해주십시오 수
라즈 쿠마르

2

기본적으로 명령 프롬프트는 System32에 연결됩니다. 64 비트 명령 프롬프트, 즉 C:\WINDOWS\SYSWOW64\CMD.EXE. 그 안에서 자바 애플리케이션을 컴파일하고 실행하십시오.


2

이 문제를 해결하려면 먼저 Java 소프트웨어가 64 비트 버전 인 경우 32 비트 버전이어야합니다. 분명히 불일치 오류가 표시되므로 32 비트의 Java 버전을 다시 설치하고 c : \ 명령으로 Java 프로그램을 실행하십시오. windows \ sysWOW64 \ odbcad32.exe (복사하여 실행 대화 상자에 붙여 넣기가 가장 쉬움)로 프로그램이 확실히 작동합니다.


1

문제는 Office 32 비트와 명령 프롬프트 64 비트 때문일 수 있습니다. 문제를 해결하려면 다음 두 단계를 따라야합니다.

  1. 다음을 사용하여 DSN 용 ODBC 관리자를 엽니 다. C : \ Windows \ SysWOW64 \ odbcad32.exe 32 비트 버전의 ODBC 데이터 관리자가 열리고 모든 데이터베이스 드라이버가 표시됩니다.

  2. 그런 다음 다음을 사용하여 32 비트 명령 프롬프트를 열어야합니다. C : \ Windows \ SysWOW64 \ cmd.exe 32 비트 버전의 명령 프롬프트가 열립니다. 이 새로운 CMD에서 Java 프로그램을 다시 컴파일하고 프로그램을 실행하십시오.

이것이 도움이되기를 바랍니다.


1

조금 늦었지만 동일한 문제가 발생했기 때문에 정확한 시나리오에서 내 솔루션을 추가 할 것이라고 생각했습니다.

Windows 7 (64 비트) 및 Office 2010 (32 비트)이 있습니다. DSN없는 연결 문자열로 시도했습니다.

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb

System32 및 SysWOW64 버전의 ODBC Admin을 모두 사용하여 DSN 연결을 시도했지만 그 중 아무것도 작동하지 않았습니다.

마침내 효과가 있었던 것은 비트 버전의 Java와 비트 버전의 Office를 일치시키는 것이 었습니다. 일단 그렇게하면 번거 로움없이 DSN 또는 DSN 덜 연결 모드를 사용할 수 있습니다.


나는 Mob의 대답에서 이것을 암시했지만 확인해 주셔서 감사합니다. 엉망진창이야!
Kevin Bowersox 2014-06-26

0

제어판> 관리 도구> ODBC> 시스템 DSN에서 먼저 DSN을 생성 했습니까? "myDatabase"와 같은 이름을 지정하고 데이터베이스 / 액세스 파일을 찾으려면 찾아보기 옵션을 사용하여 경로를 지정하십시오. DSN이 성공적으로 생성되면 쉽게 DB에 액세스 할 수 있습니다.


C : \ Windows \ SysWOW64 ...에서 찾은 ODBC로 DSN을 만들었습니다. 제어판의 드라이버는 SQL 서버용 드라이버를 저장하지 않았습니다.
user1028408

그런 다음 해당 드라이버가 없으면 ODBC 연결을 만들 수 없기 때문에 드라이버를 설치해야합니다.
Ankur Jain

이 드라이버에 대한 링크가 있습니까? 일부 설치를 시도했지만 작동하지 않았습니다.
user1028408


이 파일을 다운로드하고 연결 문자열로 대체했습니다. Connection dbConnection = DriverManager.getConnection ( "Driver = {Microsoft Access Driver (*. mdb, * .accdb)}; DBQ = C : \\ Users \\ Owner \\ Documents \\ myDatabase .mdb ","admin "," "); 그러나 그것은 여전히 ​​나에게 문제를 안겨줍니다. 코드에서 다른 것을 변경해야할까요?
user1028408

0

netbeans를 사용하는 경우 tools-> java Platform으로 이동하여 c : / programfiles / java / jdk1_7을 가리키는 jdk_home을 c : programFiles (x86) / java / jdk1_6_21로 변경합니다.

편집 할 수없는 경우 netbeans.cnf를 찾아 jdk_home에 대해 명시된대로 변경하십시오. neatbeans를 다시 시작하고 어떻게 작동하는지 같은 문제가 있었지만 작업했습니다.


0

MS Access 2010을 사용하여 Windows 7을 실행하는 64 비트 랩톱에서 MySQL에 연결하는 데 많은 문제가있었습니다. 이전 기사가 매우 도움이되었지만 여전히 odbc 3.5.1을 사용하여 연결할 수 없었습니다. 이전에 Connector / ODBC 5.1.13을 사용하여 32 비트 시스템을 연결 했으므로 해당 버전을 다운로드하고 위의 지침에 따라 설정했습니다. 성공. 대답은 다른 버전의 Connector.odbc를 시도하는 것 같습니다.


0

32 비트 드라이버를 사용하여 64 비트 플랫폼에서 연결하는 경우 실행 가능한 C : \ Windows \ SysWOW64 \ odbcad32.exe를 실행하고 DSN을 만듭니다. 작동합니다.


0

일부 레거시 CLASP 응용 프로그램이있는 Windows 7 서버로 업그레이드 할 때이 문제가 발생했습니다. 64 비트 컴퓨터에서 32 비트 응용 프로그램을 실행하려고합니다.

응용 프로그램 풀 32 비트 호환성을 True로 설정하거나 32 비트 및 64 비트에서 dsn을 만드십시오.

실행 상자에서 두 버전 모두에서 odbc 데이터 소스 창을 엽니 다. C : \ Windows \ SysWOW64 \ odbcad32.exe C : \ Windows \ system32 \ odbcad32.exe


0

이 문제가 발생했습니다. 이것은 컴퓨터 아키텍처와 사용중인 데이터베이스 아키텍처 때문입니다.

32 비트 운영 체제를 사용하는 경우 32 비트 소프트웨어 만 설치할 수 있으므로 모든 것이 잘 작동합니다. 64 비트 운영 체제를 사용할 때 문제가 발생합니다.

이 문제를 해결하는 것은 간단합니다.이 문제를 발견하는 데 오랜 시간이 걸렸습니다.

  1. 운영 체제를 아는 것은 64 비트이지만 Microsoft Office는 32 비트입니다.
  2. 따라서 NetBean IDE (이것을 사용한다고 가정)를 사용하여 데이터베이스에 액세스하려면 32 비트 JDK를 설치해야합니다. 64 비트를 설치 한 경우 제거하고 32 비트를 설치해야합니다.

64 비트 JVM이 32 비트 JVM과 동일하지 않기 때문에 데이터베이스에 액세스 할 수 없습니다.

시스템에 데이터베이스를 추가하려면 1. 제어판 2. 관리자 도구 3. 데이터 소스 (ODBC)를 마우스 오른쪽 버튼으로 클릭하여 대상을 \ sysWOW64 \ odbcad32.exe로 변경하고 시작 위치를 r % \ SysWOW64로 변경합니다.

그러면 실행할 수 있어야합니다. 이것에 문제가 있으면 알려주십시오.

감사합니다!


0

오류를 수정했습니다.

다음 단계를 따르십시오.

  1. 32bt 버전의 JDK 설치
  2. MS-Office 2007 설치
  3. 제어판 구성 : a. 제어판 b. 관리자 도구 c. 데이터 소스 (ODBC)

    마우스 오른쪽 버튼으로 클릭 \sysWOW64\odbcad32.exe하여 시작 을 변경하려면 대상을 변경하십시오.r%\SysWOW64

그것을 실행하고 행운을 빕니다. Windows 7 및 8에서 작동

최신 버전의 MS-Office를 제거하고 문제가 계속되면 MS-Office 2007 만 설치하십시오.


0

이 문제는 반드시 그렇게 자바 버전의 32 비트를 설치 재와의 명령에서 자바 프로그램을 실행하려고 명확하게 불일치 오류가 표시됩니다 64 비트 버전의 경우 자바 소프트웨어가 32 비트 버전을해야한다는하게 해결하기 c:\windows\sysWOW64\odbcad32.exe(에 쉬운 실행 대화 상자에 복사하여 붙여 넣기) 프로그램이 확실히 작동하는 것으로 충분합니다.


0

나는 이것이 또한 더 도움이 될 것이라고 생각합니다.

아키텍처 미스 매치의 경우

32 비트 파일 C : \ Program Files (x86) \ Java \ jdk1.7.0_71에서 jdk 파일을 복사하여 64 비트 파일 C : \ Program Files \ Java \ jdk1.7.0_10에 붙여 넣습니다. IDE 오류 (netbeans)를 피하기 위해 대체하는 파일과 일치하도록 파일 이름을 바꿉니다.

그럼 갈 수 있습니다.

참고 : 64 비트 파일을 buckup해야 64 비트 응용 프로그램을 만들 때 해당 위치로 되돌릴 수 있습니다.


Hacky McHack Hack :(
Gareth

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.