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);
}
}
}
Odpowiedzi:
Ż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.
źródło
c:\windows\sysWOW64\odbcad32.exe
i 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.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
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.
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.
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.
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:
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
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:
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:
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.
źródło
32 bit: c:\windows\system32\odbcad32.exe
64 bit: c:\windows\sysWOW64\odbcad32.exe
sysWOW64
jest 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.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
źródło
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.
źródło
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.źródło
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
źródło
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:
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.
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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ć.
źródło
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
źródło
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.
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!
źródło
Naprawiłem błąd.
Wykonaj kroki:
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.exe
zmienić 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
źródło
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źródło
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
źródło
Przejdź do tego łącza i pobierz sterownik ODBC dla 64-bitowego systemu operacyjnego.
http://www.microsoft.com/en-us/download/details.aspx?id=13255
źródło