Pytanie Określona nazwa DSN zawiera niedopasowanie architektury między sterownikiem a aplikacją. JAWA


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

java.sql.SQLException: [Microsoft] [Menedżer sterowników ODBC] Określona nazwa DSN zawiera niedopasowanie 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);
        }
    }
}

76
2018-01-17 13:56


pochodzenie


Czy używasz jvm w wersji 64-bitowej? Jeśli tak, potrzebujesz 64-bitowego sterownika ODBC. - dogbane
Tak, myślę, że jestem. Znalazłem 64-bitową wersję ODBC w C: \ Windows \ SysWOW64, ale nie jest to ta sama, którą włącza się panel sterowania. - user1028408
Nie można zainstalować 64-bitowego sterownika, ponieważ moje inne produkty biurowe mają 32-bitowy adres: / - DavidVdd


Odpowiedzi:


Żaden z nich nie zrobił tego dla mnie. Znalazłem odpowiedź na MSDN. Były jednak wskazówki. Architektura w błędzie odnosi się do 32 kontra 64 bitów. Moim rozwiązaniem było sprawdzenie, która aplikacja działa (Access), która w roku 2010 to 32b. Znalazłem to patrząc na karcie Proces Menedżera zadań, gdzie wszystkie procesy 32b mają * 32 koniec ich nazw. Jak już wspomniano, centrala uruchomi 64 bitowa wersja ODBC stąd

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)

Dlatego skonfigurowałem DSN o nazwach kończących się na 32 i 64 w każdym z odpowiednich paneli kontrolnych ODBC (administrator AKA), które wskazywały na to samo. Następnie wybrałem / wybrałem prawidłowy w zależności od tego, czy aplikacja korzystająca z niego to 32b czy 64b.


114
2017-09-21 19:59



Próbowałem wersji 64-bitowej i uruchomiłem ją jako administrator, ale to też nie działa !! - Fatima Zohra
Musi być harmonia bitów. Jeśli aplikacja ma 32, musi to być konfiguracja 32-bitowa. Jeśli aplikacja ma numer 64, musisz mieć wersję 64. Nie próbowałem tworzyć konfiguracji o tej samej nazwie, ponieważ nie chciałem, żeby się zsynchronizowały (zapomnij zmienić oba jednocześnie). Nie podałeś mi wystarczająco dużo informacji, by spróbować zaproponować sugestie. Mam nadzieję, że to wymyśliłeś. (Dlaczego nie mogą zrobić tak bardzo prostej rzeczy i stworzyć jedną 64-bitową aplikację, która konfiguruje środowiska 64- i 32-bitowe ???) - Pecos Bill
I jak stwierdzono poniżej, ale nie jest to oczywiste, kierowcy również muszą się dopasować (prawdopodobnie najlepiej zainstalować zarówno 32, jak i 64), choć nie sądzę, że można wybrać sterownik, jeśli nie była 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 ODBC Cloudea Hive. Kiedy przełączyłem się na złącze 32-bitowe, działało świetnie! - Mark Vickery
Tak więc, aby było jasne: Ty żargon skonfiguruj 32-bitowe połączenie ODBC PostgreSQL za pośrednictwem zwykłego GUI systemu Windows w 64-bitowym systemie. Zamiast tego należy zamknąć Administratora źródła danych ODBC (jeśli jest on obecnie otwarty), uruchom c:\windows\sysWOW64\odbcad32.exe i stamtąd skonfigurować połączenie. Następnie możesz później użyć tego połączenia w programie 32-bitowym, aby uzyskać dostęp do bazy danych. - Ajedi32


Dokładnie taki sam błąd występuje podczas próby połączenia z bazą danych MySQL z MS-Access, gdy wersja bitowa (32 lub 64) programu Access nie jest zgodna

  1. wersja bitowa sterownika ODBC, którego używasz
  2. wersję bitową Menedżera ODBC, którą ustawiłeś.

Dla tych, którzy próbują podłączyć MS Access do MySQL w 64-bitowym systemie Windows, przeszedłem przez zwykłą torturę, próbując zmusić ją do pracy z MS-Access 2010 i MS-Access 2013. Wreszcie udało się, że działa, a tu są lekcje, których się nauczyłem po drodze:

Kupiłem nowy Windows 7, 64-bitowy laptop i mam aplikację, która opiera się na MS-Access przy użyciu tabel MySQL.

  1. Zainstalowałem najnowszą wersję MySQL, 5.6, używając instalacji pakietowej All In One. Umożliwia to jednoczesną instalację sterowników bazy danych i ODBC. To miło, ale sterownik ODBC, który instaluje, wydaje się być 64-bitowym, więc nie będzie działać z 32-bitowym MS-Access. Wydaje się też trochę kłopotliwa - nie na pewno na tym. Po dodaniu nowego numeru DSN w Menedżerze ODBC ten sterownik pojawia się jako "Microsoft ODBC For Oracle". Nie mogłem zmusić tego do pracy. Musiałem zainstalować 32-bitowy, omówiony poniżej.

    • MySQL działał poprawnie po instalacji. Przywróciłem moją 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, jak zakładałem, był 64-bitowy. Ale po sprawdzeniu wersji (File, Account, About Access) widzę, że jest to 32-bitowy. Zarówno program Access 2010, jak i 2013 są najczęściej sprzedawane w wersji 32-bitowej.

  3. Moja maszyna to maszyna 64-bitowa. Domyślnie, kiedy przechodzisz do ustawiania swoich nazw DSN dla MS-Access i przechodzisz w zwykły sposób do Menedżera ODBC za pośrednictwem Panelu sterowania, Opcje administracyjne, otrzymujesz 64-bitowego menedżera ODBC. Nie możesz tego wiedzieć! Po prostu nie możesz powiedzieć. To jest ogromne wrażenie !! Nie można ustawić stamtąd DSN i połączyć go z MS Access 32-bitowym. Otrzymasz przerażający błąd:

    "określony dsn zawiera niedopasowanie 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 poinformować menedżera ODBC w Panelu sterowania, aby wziął udział w podwy szeniu, a zamiast tego musi jawnie wywołać 32-bitowy menedżer ODBC z poleceniem wykonanym w wierszu polecenia Start:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Stworzyłem skrót do tego na moim pulpicie. Stwórz swój DSN za pomocą tego menedżera. Ważna uwaga: ZBUDUJ JĄ W SYSTEMIE DSNS, NIE UŻYTKOWNIK DSNS! To potknęło mnie na chwilę.

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

    c: \ windows \ system32 \ odbcad32.exe

  6. Po zainstalowaniu 32-bitowego sterownika ODBC z MySql, po kliknięciu Dodaj w Menedżerze ODBC zobaczysz 2 wymienione sterowniki. Wybierz "Sterownik ANSI MySQL 5.2 ANSI". Nie wypróbowałem sterownika UNICODE.


To robi. Po zdefiniowaniu swoich nazw 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, Link do bazy danych, wybierz Dane maszynowe i DSN, które utworzyłeś w swoim MySQL baza danych będzie tam.


23
2018-06-22 01:36



dzięki za wszystkie szczegóły! - Dirk Hartzer Waldeck
Myślę, że zmieniłeś ścieżki dla dwóch menedżerów ODBC 32 bit: c:\windows\system32\odbcad32.exe  64 bit: c:\windows\sysWOW64\odbcad32.exe - Jrgns
@Jrgns Nie, nie są przełączane. sysWOW64 jest faktycznie 32-bitowym katalogiem. Windows uwielbia być zagmatwany. Będziesz wiedzieć, której wersji używasz, ponieważ pokaże się (32-bitowy) lub (64-bitowy) w pasku tytułu administratora ODBC Data Source Administrator. - Tim Leaf


Istnieje niedopasowanie architektury. Sterownik JDBC i pakiet JDK powinny mieć tę samą architekturę. Jeśli używasz 32-bitowego sterownika i JDK ma 64-bitowy, dostaniesz ten błąd.

Widzieć to

Napraw: w zależności od architektury.

Potrzebne będą 64-bitowe sterowniki, jeśli twoja Java jest 64-bitowa.

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


8
2018-01-17 14:07



Jak mogę to naprawić? - user1028408
pobieranie teraz. - user1028408
pobrałem go i wypróbowałem nowy ciąg połączenia, jak określono w instrukcjach, ale nadal nie działał. Może robię coś nie tak? - user1028408


Domyślnie wiersz poleceń jest podłączony do System32. Uruchom 64-bitowy wiersz polecenia, tzn. C:\WINDOWS\SYSWOW64\CMD.EXE. W tym celu skompiluj i uruchom aplikację java.


2
2017-07-08 05:28





Problem, który napotkałeś, może być spowodowany tym, że: dysponował 32-bitowym pakietem Office i 64-bitowym wierszem polecenia. Aby rozwiązać problem, musisz wykonać dwa kroki:

  1. Otwórz Menedżera ODBC dla DSN, używając: C: \ Windows \ SysWOW64 \ odbcad32.exe Spowoduje to otwarcie Administratora danych ODBC dla wersji 32-bitowej, a zobaczysz wszystkie sterowniki bazy danych.

  2. Następnie należy otworzyć wiersz polecenia 32-bitowego za pomocą: C: \ Windows \ SysWOW64 \ cmd.exe Spowoduje to otwarcie 32-bitowej wersji wiersza polecenia. W tej nowej CMD proszę ponownie skompilować swój program Java i uruchomić program.

Mam nadzieję, że to pomoże.


1
2017-12-26 17:40





Trochę za późno, ale skoro napotkałem ten sam problem, w twoim dokładnym scenariuszu doszedłem do wniosku, że dodam moje 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 zarówno wersji System32 i SysWOW64 administratora ODBC, i nic z tego nie działało.

W końcu udało się dopasować wersję bitową Javy do wersji bitowej pakietu Office. Kiedy to zrobię, mogę użyć trybu bez połączenia DSN lub DSN, bez żadnego zamieszania.


1
2018-05-18 22:13



Sugerowałem to z odpowiedzi Moby, ale dzięki za potwierdzenie. Co za bałagan! - Kevin Bowersox


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

Po zainstalowaniu sterownika ODBC z programu instalacyjnego sterownika można zdefiniować jedno lub więcej źródeł danych. Nazwa źródła danych (DSN) powinna zapewniać unikalny opis danych; na przykład listy płac lub rachunki płatne. Źródła danych użytkownika i systemu zdefiniowane dla wszystkich aktualnie zainstalowanych sterowników są wymienione na kartach Użytkownik DSN lub Systemowe DSN w oknie dialogowym Administrator źródła danych ODBC. Źródła danych plików w danym katalogu są wymienione w zakładce Plik DSN; katalog do wyświetlenia jest wprowadzany w polu Szukaj w na karcie Plik DSN. System_CAPS_noteNote

Aby zarządzać źródłem danych, które łączy się z 32-bitowym sterownikiem w 64-bitowej platformie, 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 korzystasz z 64-bitowego programu odbcad32.exe do skonfigurowania lub usunięcia DSN, który łączy się ze sterownikiem 32-bitowym, na przykład Driver do Microsoft Access (* .mdb), pojawi się następujący komunikat o błędzie:

Określona nazwa DSN zawiera niedopasowanie architektury między sterownikiem a aplikacją

Aby rozwiązać ten problem, użyj 32-bitowego pliku odbcad32.exe, aby skonfigurować lub usunąć numer DSN.

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


1
2017-12-07 11:01



Cześć Bineesh Kumar, proszę, wytłumacz mi bryczkę - Raj Kumar


Czy najpierw utworzyłeś DSN w Panelu sterowania> Narzędzia administracyjne> ODBC> Systemowy DSN. Nazwij go tak samo jak "myDatabase", a gdybym pytał o lokalizację pliku bazy danych / dostępu, określ ścieżkę za pomocą opcji przeglądania. Po utworzeniu DSN z powodzeniem będzie można łatwo uzyskać dostęp do DB ur.


0
2018-01-17 14:09



Stworzyłem DSN z ODBC, które znalazłem w C: \ Windows \ SysWOW64 ... Ten w panelu sterowania prawie nie zapisywał sterowników dla serwera sql. - user1028408
następnie należy zainstalować sterowniki, ponieważ bez tych sterowników nie można nawiązać połączenia ODBC. - Ankur Jain
masz link do tych sterowników? Próbowałem zainstalować niektóre, ale nie działały. - user1028408
microsoft.com/download/en/details.aspx?id=13255, microsoft.com/download/en/details.aspx?id=23734 - Ankur Jain
Pobrałem te i zastąpiłem ciąg połączenia: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (* .mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," admin "," "); ale wciąż sprawia mi kłopot. Może muszę zmienić coś innego w kodzie? - user1028408