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

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);
        }
    }
}



답변

이들 중 어느 것도 나를 위해 해주지 않았습니다. 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인지에 따라 올바른 것을 선택 / 선택합니다.


답변

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을 선택할 수 있습니다. 데이터베이스가있을 것입니다.


답변

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

참조

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

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

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


답변

나는이 대답을 보았고 그것은 나를 위해 일했습니다.
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 데이터 원본 관리자를 사용하여 다음 표에 설명 된대로 데이터 원본을 추가, 수정 및 삭제할 수 있습니다.


답변

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


답변

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


답변

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

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

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

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