Określony DSN zawiera niezgodność architektury między sterownikiem i aplikacją. JAWA


85

Próbuję połączyć się z bazą danych utworzoną przez MS Access przy użyciu języka Java, ale nie mogę sobie z tym poradzić. Używam ODBC i otrzymuję ten wyjątek:

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] Określony DSN zawiera niezgodność architektury między sterownikiem a aplikacją

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

2
Czy używasz 64-bitowej jvm? Jeśli tak, potrzebujesz 64-bitowego sterownika ODBC.
dogbane

1
Tak, myślę, że tak. Znalazłem 64-bitową wersję ODBC w C: \ Windows \ SysWOW64, ale to nie ta sama, którą włącza panel sterowania.
user1028408

Nie mogę zainstalować sterownika 64-bitowego, ponieważ moje inne produkty biurowe są 32-bitowe: /
DavidVdd

Odpowiedzi:


128

Żaden z nich nie zrobił tego za mnie. Znalazłem odpowiedź w MSDN. Były jednak na to wskazówki. Architektura w błędzie odnosi się do bitów 32 vs 64. Moim rozwiązaniem było ustalenie, która moja aplikacja działa w ramach (Access), który 2010 to 32b. Znalazłem to, patrząc na kartę Proces w Menedżerze zadań, gdzie wszystkie procesy 32b mają końcówki * 32 na końcu swoich nazw. Jak już powiedziano, panel sterowania uruchomi stąd 64- bitową wersję ODBC

c:\windows\system32\odbcad32.exe

a wersja 32-bitowa jest tutaj:

c:\windows\sysWOW64\odbcad32.exe (najłatwiej skopiować i wkleić do okna dialogowego uruchamiania)

Ustawiłem więc DSN z nazwami kończącymi się na 32 i 64 w każdym z odpowiednich paneli sterowania ODBC (AKA Administrator), które wskazywały na to samo. Następnie wybrałem / wybrałem właściwy w zależności od tego, czy używająca go aplikacja to 32b czy 64b.


Próbowałem wersji 64-bitowej i uruchomiłem ją jako administrator, ale to też nie działa !!
Fatima Zohra,

2
Musi istnieć harmonia bitowa. Jeśli aplikacja jest 32-bitowa, musi istnieć dla niej konfiguracja 32-bitowa. Jeśli aplikacja ma 64 lata, musisz mieć taką, która ma 64 lata. Nie próbowałem tworzyć konfiguracji o tej samej nazwie, ponieważ nie chciałem, aby wypadały z synchronizacji (zapomnij zmienić obie w tym samym czasie). Nie podałeś mi wystarczających informacji, aby spróbować zasugerować. Mam nadzieję, że to rozgryzłeś. (Dlaczego nie mogą zrobić tak bardzo prostej rzeczy i stworzyć jednej 64-bitowej aplikacji, która konfiguruje zarówno środowiska 64, jak i 32-bitowe?)
Pecos Bill

I jak stwierdzono poniżej, ale nie jest to oczywiste, zaangażowane sterowniki również muszą pasować (prawdopodobnie najlepiej jest zainstalować zarówno 32, jak i 64), chociaż nie sądzę, abyś mógł wybrać sterownik, jeśli nie jest to właściwa architektura.
Pecos Bill,

Pomogło mi to również rozszyfrować, dlaczego mój 32-bitowy program Excel nie mógł połączyć się z naszym serwerem Hadoop Hive przy użyciu 64-bitowego sterownika Cloudea Hive ODBC. Po przełączeniu na złącze 32-bitowe działało świetnie!
Mark Vickery

2
Aby było jasne: nie można skonfigurować 32-bitowego połączenia PostgreSQL ODBC przez zwykły graficzny interfejs użytkownika systemu Windows w systemie 64-bitowym. Zamiast tego musisz zamknąć Administratora źródła danych ODBC (jeśli jest aktualnie otwarty), uruchomić c:\windows\sysWOW64\odbcad32.exei skonfigurować połączenie z tego miejsca. Następnie możesz później użyć tego połączenia w programie 32-bitowym, aby uzyskać dostęp do bazy danych.
Ajedi 32

26

Ten sam błąd pojawia się podczas próby połączenia się z bazą danych MySQL z MS-Access, gdy wersja bitowa (32 vs 64) programu Access nie jest zgodna

  1. wersja bitowa używanego sterownika ODBC
  2. bitowa wersja Menedżera ODBC użyta do jej skonfigurowania.

Dla tych z Was, którzy próbują połączyć MS-Access z MySQL w 64-bitowym systemie Windows, przeszedłem przez zwykłe tortury, próbując zmusić go do pracy zarówno z MS-Access 2010, jak i MS-Access 2013. Wreszcie udało mi się to zadziałać, a oto lekcje, których nauczyłem się po drodze:

Kupiłem nowy 64-bitowy laptop z systemem Windows 7 i mam aplikację, która polega na MS-Access i korzysta z tabel MySQL.

  1. Zainstalowałem najnowszą wersję MySQL, 5.6, korzystając z instalacji pakietu All In One. Pozwala to na jednoczesną instalację zarówno bazy danych, jak i sterowników ODBC. To miłe, ale sterownik ODBC, który instaluje, wydaje się być 64-bitowy, więc nie będzie działać z 32-bitowym MS-Access. Wydaje się też trochę wadliwy - nie jestem pewien. Po dodaniu nowego DSN w Menedżerze ODBC, ten sterownik pojawia się jako „Microsoft ODBC For Oracle”. Nie mogłem zmusić tego do pracy. Musiałem zainstalować wersję 32-bitową, omówioną poniżej.

    • MySQL działał dobrze po instalacji. Przywróciłem bazę danych MySQL aplikacji w zwykły sposób. Teraz chcę się z nim połączyć za pomocą MS-Access.


  2. Wcześniej zainstalowałem Office 2013, który zakładałem, że jest 64-bitowy. Ale po sprawdzeniu wersji (Plik, Konto, Informacje o dostępie) widzę, że jest to wersja 32-bitowa. Zarówno Access 2010, jak i 2013 są najczęściej sprzedawane jako wersje 32-bitowe.

  3. Moja maszyna jest maszyną 64-bitową. Więc domyślnie, kiedy idziesz skonfigurować swoje DSN dla MS-Access i przechodzisz w zwykły sposób do Menedżera ODBC przez Panel sterowania, Opcje administracyjne, otrzymasz 64-bitowego menedżera ODBC. Nie możesz tego wiedzieć! Po prostu nie możesz powiedzieć. To jest wielka wpadka !! Nie można stamtąd ustawić DSN i połączyć go z 32-bitowym MS Access. Otrzymasz przerażający błąd:

    „określony dsn zawiera niezgodność architektury ...”

  4. Musisz pobrać i zainstalować 32-bitowy sterownik ODBC z MySQL. Użyłem wersji 3.5.1

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

  5. Musisz powiedzieć Menedżerowi ODBC w Panelu sterowania, aby wybrał krok i zamiast tego musisz jawnie wywołać 32-bitowego Menedżera ODBC za pomocą tego polecenia wykonywanego w wierszu polecenia Start:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Utworzyłem do tego skrót na moim pulpicie. Stąd utwórz swoje DSN z tym menedżerem. Ważna uwaga: ZBUDUJ JE JAKO SYSTEMOWE DSN, A NIE USER DSN! To mnie poderwało na chwilę.

    Nawiasem mówiąc, 64-bitową wersję Menedżera ODBC można również uruchomić jawnie jako:

    c: \ windows \ system32 \ odbcad32.exe

  6. Po zainstalowaniu 32-bitowego sterownika ODBC z MySql, po kliknięciu przycisku Dodaj w Menedżerze ODBC zobaczysz listę 2 sterowników. Wybierz „MySQL ODBC 5.2 ANSI Driver”. Nie próbowałem sterownika UNICODE.


To wszystko. Po zdefiniowaniu swoich DSN w 32-bitowym menedżerze ODBC, możesz połączyć się z MySQL w zwykły sposób z poziomu Access - dane zewnętrzne, baza danych ODBC, łącze do bazy danych, wybierz źródło danych maszynowych i DSN utworzone w MySQL baza danych będzie tam.


2
Myślę, że 32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
zmieniłeś

3
@Jrgns Nie, nie są przełączane. sysWOW64jest w rzeczywistości katalogiem 32-bitowym. Windows uwielbia wprowadzać w błąd. Będziesz wiedział, której wersji używasz, ponieważ pojawi się (32-bitowa) lub (64-bitowa) na pasku tytułu Administratora źródeł danych ODBC.
Tim Leaf

8

Występuje niedopasowanie architektury. Twój sterownik JDBC i JDK powinny mieć tę samą architekturę. Jeśli używasz sterownika 32-bitowego, a JDK ma 64 bity, otrzymasz ten błąd.

Zobacz to

Poprawka: zależy od architektury.

Jeśli Twoja Java jest 64-bitowa, będziesz potrzebować sterowników 64-bitowych.

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


pobrałem go i wypróbowałem nowe parametry połączenia, zgodnie z instrukcją, ale nadal nie działało. Może robię coś źle?
user1028408

2

Widziałem tę odpowiedź i zadziałała. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Po zainstalowaniu sterownika ODBC z programu instalacyjnego sterownika można zdefiniować dla niego jedno lub więcej źródeł danych. Nazwa źródła danych (DSN) powinna zapewniać unikalny opis danych; na przykład lista płac lub rozrachunki z dostawcami. Źródła danych użytkownika i systemu, które są zdefiniowane dla wszystkich aktualnie zainstalowanych sterowników, są wymienione na kartach DSN użytkownika lub Systemowe DSN w oknie dialogowym Administrator źródeł danych ODBC. Źródła danych plików w danym katalogu są wymienione na karcie Plik DSN; katalog, który ma zostać wyświetlony, jest wprowadzany w polu Szukaj w na karcie Plik DSN. System_CAPS_noteNote

Aby zarządzać źródłem danych, które łączy się ze sterownikiem 32-bitowym na platformie 64-bitowej, użyj c: \ windows \ sysWOW64 \ odbcad32.exe. Aby zarządzać źródłem danych, które łączy się ze sterownikiem 64-bitowym, użyj c: \ windows \ system32 \ odbcad32.exe. W Narzędziach administracyjnych w 64-bitowym systemie operacyjnym Windows 8 znajdują się ikony zarówno dla 32-bitowego, jak i 64-bitowego okna dialogowego Administrator źródła danych ODBC.

Jeśli używasz 64-bitowego odbcad32.exe do konfigurowania lub usuwania nazwy DSN, która łączy się ze sterownikiem 32-bitowym, na przykład Driver do Microsoft Access (* .mdb), pojawi się następujący komunikat o błędzie:

Określony DSN zawiera niezgodność architektury między sterownikiem i aplikacją

Aby rozwiązać ten błąd, użyj 32-bitowego pliku odbcad32.exe do skonfigurowania lub usunięcia nazwy DSN.

Źródło danych kojarzy określony sterownik ODBC z danymi, do których chcesz uzyskać dostęp za pośrednictwem tego sterownika. Na przykład można utworzyć źródło danych, aby użyć sterownika ODBC dBASE w celu uzyskania dostępu do jednego lub większej liczby plików dBASE znajdujących się w określonym katalogu na dysku twardym lub dysku sieciowym. Korzystając z Administratora źródeł danych ODBC, można dodawać, modyfikować i usuwać źródła danych zgodnie z opisem w poniższej tabeli.


Cześć Bineesh Kumar, czy mógłbyś szybko wyjaśnić
Raj Kumar

2

Domyślnie wiersz polecenia jest połączony z System32. Uruchom 64-bitowy wiersz polecenia, tj C:\WINDOWS\SYSWOW64\CMD.EXE. W tym celu skompiluj i uruchom swoją aplikację java.


2

Aby rozwiązać ten problem, najpierw upewnij się, że oprogramowanie java powinno być w wersji 32-bitowej, jeśli jest to wersja 64-bitowa, wyraźnie pokaże błąd niezgodności, więc spróbuj ponownie zainstalować 32-bitową wersję java I uruchom program java w poleceniu c: \ windows \ sysWOW64 \ odbcad32.exe (najłatwiejsze do skopiowania i wklejenia do okna dialogowego uruchamiania) wystarczy, że Twój program na pewno działa


1

Problem, z którym się spotkałeś, może wynikać z tego, że: masz 32-bitowy pakiet Office i 64-bitowy wiersz polecenia. Aby rozwiązać problem, musisz wykonać 2 kroki:

  1. Otwórz Menedżera ODBC dla DSN za pomocą: C: \ Windows \ SysWOW64 \ odbcad32.exe Spowoduje to otwarcie Administratora danych ODBC dla wersji 32-bitowej i wyświetlenie wszystkich sterowników bazy danych.

  2. Następnie musisz otworzyć 32-bitowy wiersz poleceń za pomocą: C: \ Windows \ SysWOW64 \ cmd.exe Spowoduje to otwarcie 32-bitowej wersji wiersza poleceń. W tym nowym CMD skompiluj ponownie swój program Java i uruchom program.

Mam nadzieję, że to pomoże.


1

Trochę późno, ale ponieważ napotkałem ten sam problem, w twoim konkretnym scenariuszu, pomyślałem, że dodam swoje rozwiązanie.

Mam Windows 7 (64-bitowy) i Office 2010 (32-bitowy). Próbowałem z ciągiem połączenia bez DSN:

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

i próbowałem z połączeniem DSN, używając wersji Administratora ODBC System32 i SysWOW64 i nic z tego nie działało.

Ostatecznie udało się dopasować bitową wersję Javy do bitowej wersji pakietu Office. Gdy to zrobiłem, mogłem bez problemu użyć trybu połączenia DSN lub DSN bez połączenia.


Zasugerowałem to z odpowiedzi Moba, ale dzięki za potwierdzenie. Co za bałagan!
Kevin Bowersox

0

Czy utworzyłeś najpierw DSN w Panelu sterowania> Narzędzia administracyjne> ODBC> Systemowe DSN. Nadaj mu taką samą nazwę, jak „myDatabase”, a jeśli pytam o lokalizację bazy danych / pliku dostępu, określ ścieżkę za pomocą opcji przeglądania. Po pomyślnym utworzeniu twojego DSN będziesz mógł łatwo uzyskać dostęp do ur DB.


Utworzyłem swoje DSN za pomocą ODBC, które znalazłem w C: \ Windows \ SysWOW64 ... Ten w panelu sterowania prawie nie miał sterowników poza tymi dla serwera sql.
user1028408

wtedy musisz zainstalować sterowniki, ponieważ bez tych sterowników nie możesz nawiązać połączenia ODBC.
Ankur Jain

czy masz link do tych sterowników? Próbowałem zainstalować niektóre, ale nie zadziałały.
user1028408


Pobrałem je i podstawiłem ciąg połączenia: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb ”,„ admin ”,„ ”); ale nadal sprawia mi to kłopoty. Może muszę zmienić coś innego w kodzie?
user1028408

0

Jeśli używasz netbeans, przejdź do tools-> Java Platform, zmień jdk_home, co wskazuje na c: / programfiles / java / jdk1_7 na c: programFiles (x86) / java / jdk1_6_21

jeśli nie można go edytować, znajdź plik netbeans.cnf i wprowadź zmiany, jak podano powyżej dla jdk_home. uruchom ponownie neatbeans i jak to działa Miałem ten sam problem, ale działałem.


0

Miałem duży problem z łączeniem się z MySQL z 64-bitowego laptopa z systemem Windows 7 i MS Access 2010. Poprzedni artykuł był bardzo pomocny, ale nadal nie mogłem połączyć się za pomocą odbc 3.5.1. Ponieważ wcześniej podłączyłem maszynę 32-bitową za pomocą Connector / ODBC 5.1.13, pobrałem tę wersję i skonfigurowałem ją zgodnie z powyższymi instrukcjami. Sukces. Wydaje się, że odpowiedzią jest wypróbowanie różnych wersji Connector.odbc.


0

Jeśli łączysz się z platformy 64-bitowej przy użyciu sterownika 32-bitowego, uruchom plik wykonywalny C: \ Windows \ SysWOW64 \ odbcad32.exe i utwórz nazwę DSN. To będzie działać.


0

Napotkałem ten problem podczas aktualizacji do serwera Windows 7 z niektórymi starszymi aplikacjami CLASP. Próbuję uruchomić aplikację 32-bitową na komputerze 64-bitowym.

Spróbuj ustawić 32-bitową zgodność pul aplikacji na True i / lub utwórz dsn w 32 i 64 bitach.

Otwórz okno źródła danych ODBC w obu wersjach z pola uruchamiania. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Napotkałem ten problem. Wynika to z architektury komputera i architektury bazy danych, której używasz.

Jeśli używasz 32-bitowego systemu operacyjnego, wszystko działa dobrze, ponieważ możesz zainstalować tylko 32-bitowe oprogramowanie. Problem pojawia się, gdy używasz 64-bitowego systemu operacyjnego.

Rozwiązanie tego problemu jest proste - zajęło mi dużo czasu, aby odkryć ten problem.

  1. Znajomość systemu operacyjnego jest 64-bitowa, ale pakiet Microsoft Office jest 32-bitowy.
  2. Aby więc uzyskać dostęp do bazy danych za pomocą NetBean IDE (zakładając, że tego używasz), musisz zainstalować 32-bitowy JDK. Jeśli zainstalowałeś 64 bity, musisz go odinstalować i zainstalować 32 bity.

Nie możesz uzyskać dostępu do bazy danych, ponieważ 64-bitowa maszyna JVM różni się od 32-bitowej maszyny JVM.

Aby dodać bazę danych do systemu 1. Panel sterowania 2. Narzędzia administratora 3. Źródło danych (ODBC) kliknij prawym przyciskiem myszy zmień miejsce docelowe na \ sysWOW64 \ odbcad32.exe zmień początek na r% \ SysWOW64

Wtedy powinieneś być w stanie biec. Poinformuj mnie, jeśli masz z tym jakiś problem.

Dziękuję Ci!


0

Naprawiłem błąd.

Wykonaj kroki:

  1. Zainstaluj pakiet JDK w wersji 32bt
  2. Zainstaluj MS-Office 2007
  3. Skonfiguruj Panel sterowania: a. Panel sterowania b. Narzędzia administratora c. Źródło danych (ODBC)

    kliknij prawym przyciskiem myszy zmień cel, aby \sysWOW64\odbcad32.exezmienić początek nar%\SysWOW64

Wykonaj to i powodzenia. Działa w systemie Windows 7 oraz 8

Usuń nowszą wersję MS-Office i zainstaluj tylko MS-Office 2007, jeśli problem nadal występuje


0

Aby rozwiązać ten problem, najpierw upewnij się, że oprogramowanie Java powinno być w wersji 32-bitowej, jeśli jest to wersja 64-bitowa, wyraźnie pokaże błąd niezgodności, więc spróbuj ponownie zainstalować 32-bitową wersję java I uruchom program java za pomocą polecenia c:\windows\sysWOW64\odbcad32.exe(najłatwiej skopiuj i wklej do okna dialogowego uruchamiania) wystarczy, że Twój program na pewno zadziała


0

myślę, że to też będzie bardziej pomocne.

na brak dopasowania architektury,

po prostu kopiuję plik jdk z 32-bitowego pliku C: \ Program Files (x86) \ Java \ jdk1.7.0_71 i wklejam go do 64-bitowego pliku C: \ Program Files \ Java \ jdk1.7.0_10, a następnie zmień nazwę pliku, aby pasował do zastępowanego pliku, aby uniknąć błędu IDE (netbeans)

wtedy możesz iść.

Uwaga: Powinieneś kupować pliki 64-bitowe, więc jeśli chcesz stworzyć aplikację 64-bitową, możesz zwrócić ją do jej lokalizacji


Hacky McHack Hack :(
Gareth

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.