Вказаний DSN містить невідповідність архітектури між драйвером та додатком. ЯВА


85

Я намагаюся підключитися до бази даних, створеної MS Access за допомогою Java, але, здається, не можу керувати. Я використовую ODBC, і я отримую такий виняток:

java.sql.SQLException: [Microsoft] [Диспетчер драйверів ODBC] Вказаний DSN містить невідповідність архітектури між драйвером та додатком

Моя 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
Ви використовуєте 64-розрядний jvm? Якщо так, то вам потрібен 64-розрядний драйвер odbc.
dogbane

1
Так, я думаю. Я знайшов 64-бітну версію odbc у C: \ Windows \ SysWOW64, але це не та сама версія, яку вмикає панель управління.
user1028408

Не вдається встановити 64-бітний драйвер,
оскільки

Відповіді:


128

Жоден з них не зробив цього для мене. Я знайшов відповідь на MSDN. Хоча на це були натяки. Архітектура помилки стосується 32 проти 64 бітів. Моїм рішенням було з’ясувати, яка програма працює під (Access), а 2010 рік - 32b. Я знайшов це, подивившись на вкладці Процес диспетчера завдань, де всі процеси 32b мають * 32 кінець своїх імен. Як вже було сказано, панель управління звідси запустить 64- розрядну версію ODBC

c:\windows\system32\odbcad32.exe

і 32-розрядна версія тут:

c:\windows\sysWOW64\odbcad32.exe (найпростіше скопіювати та вставити в діалогове вікно запуску)

Тож я встановив DSN з іменами, що закінчуються на 32 та 64 у кожній з відповідних панелей управління ODBC (Адміністратор AKA), які вказували на те саме. Потім я вибрав / вибрав правильний на основі того, чи є програма, яка його використовує, 32b чи 64b.


я спробував 64-розрядну версію і запустив її як адміністратор, але вона також не працює !!
Фатіма Зохра,

2
Повинна бути гармонія. Якщо програмі 32, для неї має бути 32-бітна конфігурація. Якщо додаток 64, у вас повинен бути той, який має 64. Я не намагався створювати конфігурації з однаковим іменем, тому що не хотів, щоб вони виходили з синхронізації (забудьте змінити обидва одночасно). Ви не дали мені достатньо інформації, щоб спробувати запропонувати пропозиції. Сподіваюся, ви це зрозуміли. (Чому вони не можуть зробити настільки просту річ і створити одну 64-розрядну програму, яка налаштовує як 64, так і 32 розрядні середовища ???)
Pecos Bill

І як було зазначено нижче, але це не очевидно, задіяні драйвери також повинні збігатися (мабуть, найкраще встановити як 32, так і 64), хоча я не думаю, що ви можете вибрати драйвер, якщо це не була належною архітектурою.
Пекос Білл

Це також допомогло мені розшифрувати, чому мій 32-бітний Excel не міг підключитися до нашого сервера Hadoop Hive за допомогою 64-бітного драйвера Cloudea Hive ODBC. Як тільки я перейшов на 32-бітний роз'єм, він спрацював чудово!
Марк Вікері

2
Щоб бути зрозумілим: Ви не можете налаштувати 32-розрядне з’єднання PostgreSQL ODBC через звичайний графічний інтерфейс Windows у 64-бітовій системі. Натомість вам потрібно закрити адміністратор джерела даних ODBC (якщо він наразі відкритий), запустити c:\windows\sysWOW64\odbcad32.exeта налаштувати з’єднання звідти. Тоді згодом ви зможете використовувати це з’єднання в 32-бітовій програмі для доступу до бази даних.
Ajedi32

26

Ви отримуєте саме ту саму помилку при спробі підключитися до бази даних MySQL з MS-Access, коли розрядна версія (32 проти 64) Access не збігається

  1. розрядна версія драйвера ODBC, який ви використовуєте
  2. розрядна версія диспетчера ODBC, яку ви використовували для його налаштування.

Для тих з вас, хто намагається підключити MS-Access до MySQL в 64-бітовій системі Windows, я пройшов через жорстокі катування, намагаючись змусити його працювати як з MS-Access 2010, так і з MS-Access 2013. Нарешті, він запрацював, і ось уроки, які я засвоїв на своєму шляху:

Я купив новий 64-розрядний ноутбук Windows 7 і маю програму, яка спирається на MS-Access за допомогою таблиць MySQL.

  1. Я встановив останню версію MySQL, 5.6, використовуючи встановлення пакета All In One. Це дозволяє встановлювати як базу даних, так і драйвери ODBC одночасно. Це приємно, але драйвер ODBC, який він встановлює, здається 64-розрядним, тому він не буде працювати з 32-розрядним MS-Access. Це також здається невеликим баггі - не точно на цьому. Коли ви додаєте новий DSN в диспетчері ODBC, цей драйвер відображається як "Microsoft ODBC для Oracle". Я не міг змусити цього працювати. Мені довелося встановити 32-бітну, про яку йдеться нижче.

    • MySQL працював нормально після встановлення. Я відновив базу даних MySQL свого додатка звичайним способом. Тепер я хочу підключитися до нього за допомогою MS-Access.


  2. Раніше я встановив Office 2013, який, на мою думку, був 64-розрядним. Але після перевірки версії (Файл, Обліковий запис, Про доступ) я бачу, що вона 32-бітна. Обидва програми Access 2010 і 2013 найчастіше продаються як 32-розрядні версії.

  3. Моя машина - це 64-розрядна машина. Отже, за замовчуванням, коли ви налаштовуєте свої DSN для MS-Access і переходите звичайним способом до менеджера ODBC за допомогою панелі керування, адміністративні параметри, ви отримуєте 64-бітний менеджер ODBC. Ви не можете цього знати! Ви просто не можете сказати. Це величезна здобич !! Неможливо встановити DSN звідти і забезпечити його успішне підключення до MS Access 32 біт. Ви отримаєте страшну помилку:

    "вказаний dsn містить невідповідність архітектури ..."

  4. Ви повинні завантажити та встановити 32-розрядний драйвер ODBC з MySQL. Я використовував версію 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. Після того, як ви встановили 32-розрядний драйвер ODBC з MySql, після натискання кнопки Додати в диспетчері ODBC ви побачите 2 драйвери. Виберіть "Драйвер ANSI MySQL ODBC 5.2". Я не пробував драйвер UNICODE.


Це робить це. Після того, як ви визначили свої DSN-адреси в 32-розрядному диспетчері ODBC, ви можете підключитися до MySQL звичайним способом із Access - Зовнішні дані, База даних ODBC, Посилання на базу даних, виберіть Машинне джерело даних і DSN, який ви створили на своєму MySQL база даних буде там.


2
Я думаю, ви змінили шляхи для двох менеджерів ODBC32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns

3
@Jrgns Ні, вони не переключені. sysWOW64насправді є 32-розрядною директорією. Windows любить плутати. Ви будете знати, яку версію використовуєте, оскільки вона відображатиметься (32-розрядною) або (64-розрядною) у рядку заголовка адміністратора джерела даних ODBC.
Тім Ліф

8

Існує невідповідність архітектури. Ваш драйвер JDBC і ваш JDK повинні мати однакову архітектуру. Якщо ви використовуєте 32-бітний драйвер і ваш JDK становить 64 біти, ви отримаєте цю помилку.

Дивіться це

Виправлення: Залежить від вашої архітектури.

Вам знадобляться 64-розрядні драйвери, якщо ваша Java є 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) повинна містити унікальний опис даних; наприклад, Заробітна плата або Кредиторська заборгованість. Джерела даних користувача та системи, визначені для всіх встановлених на даний момент драйверів, перелічені на вкладках User DSN або System DSN діалогового вікна Адміністратор джерела даних ODBC. Джерела файлових даних у даному каталозі перелічені на вкладці Файл DSN; каталог, який буде показано, вводиться у поле Шукати у на вкладці Файл DSN. System_CAPS_noteNote

Для керування джерелом даних, яке підключається до 32-розрядного драйвера під 64-розрядною платформою, використовуйте c: \ windows \ sysWOW64 \ odbcad32.exe. Для керування джерелом даних, яке підключається до 64-розрядного драйвера, використовуйте c: \ windows \ system32 \ odbcad32.exe. В Інструментах адміністрування в 64-розрядної операційної системи Windows 8 є піктограми як для 32-розрядного, так і для 64-розрядного діалогового вікна Адміністратор джерела даних ODBC.

Якщо ви використовуєте 64-розрядну версію odbcad32.exe для налаштування або видалення DSN, що підключається до 32-розрядного драйвера, наприклад, Driver do Microsoft Access (* .mdb), ви отримаєте таке повідомлення про помилку:

Вказаний DSN містить невідповідність архітектури між драйвером та додатком

Щоб вирішити цю помилку, скористайтеся 32-розрядною версією odbcad32.exe, щоб налаштувати або видалити DSN.

Джерело даних пов'язує певний драйвер ODBC з даними, до яких ви хочете отримати доступ через цей драйвер. Наприклад, ви можете створити джерело даних, щоб використовувати драйвер ODBC dBASE для доступу до одного або декількох файлів dBASE, знайдених у певному каталозі на жорсткому диску або мережевому диску. Використовуючи адміністратор джерела даних ODBC, ви можете додавати, змінювати та видаляти джерела даних, як описано в наступній таблиці.


Привіт, Бініш Кумар, будь ласка, поясни, як це було
Радж Кумар,

2

За замовчуванням командний рядок підключений до System32. Запустіть 64-розрядний командний рядок, тобто C:\WINDOWS\SYSWOW64\CMD.EXE. У цьому скомпілюйте та запустіть свою програму Java.


2

Щоб вирішити цю проблему, переконайтеся, що ваше програмне забезпечення Java має бути 32-бітною версією, якщо це 64-бітна версія, воно чітко покаже помилку невідповідності, тому спробуйте перевстановити 32-бітну версію Java та запустіть програму Java за командою c: \ windows \ sysWOW64 \ odbcad32.exe (найпростіше скопіювати та вставити в діалогове вікно запуску), цього досить, щоб ваша програма точно працювала


1

Проблема, з якою ви стикалися, може бути через те, що: у вас був 32-розрядний пакет Office та 64-розрядний командний рядок. Для вирішення проблеми потрібно виконати 2 кроки:

  1. Відкрийте ODBC Manager для DSN за допомогою: C: \ Windows \ SysWOW64 \ odbcad32.exe Це відкриє адміністратор даних ODBC для 32-розрядної версії, і ви побачите всі драйвери бази даних.

  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

і я спробував із підключенням DSN, використовуючи версії адміністратора ODBC і System32, і SysWOW64, і жодне з них не спрацювало.

Що, нарешті, спрацювало, це порівняння розрядної версії Java з розрядною версією Office. Після того, як я це зробив, я міг використовувати або режим DSN, або DSN без зв’язку, без жодної суєти.


Я мав на увазі це з відповіді Моб, але дякую за підтвердження. Який безлад!
Кевін Бауерсокс,

0

Ви створили DSN спочатку в Панелі керування> Адміністративні інструменти> ODBC> Системний DSN. Назвіть його так само, як "myDatabase", і якщо я прошу знайти місце в базі даних / файлі доступу, вкажіть шлях за допомогою опції браузера. Після успішного створення ур DSN ви зможете легко отримати доступ до вашої БД.


Я створив свій DSN за допомогою ODBC, який я знайшов у C: \ Windows \ SysWOW64 ... Той, що знаходиться на панелі керування, майже не мав драйверів, які зберігали ті для сервера SQL.
user1028408

тоді ви повинні встановити драйвери, оскільки без цих драйверів ви не можете встановити з'єднання ODBC.
Ankur Jain

у вас є посилання на ці драйвери? Я намагався встановити деякі, але вони не працювали.
user1028408


Я завантажив їх і підставив рядок підключення: Connection dbConnection = DriverManager.getConnection ("Драйвер = {Драйвер Microsoft Access (*. Mdb, * .accdb)}}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," адміністратор "," "); але це все ще доставляє мені проблеми. Можливо, мені потрібно щось інше змінити в коді?
user1028408

0

Якщо ви використовуєте netbeans, перейдіть до tools-> Java Platform, змініть jdk_home, який вказує на c: / programfiles / java / jdk1_7 на c: programFiles (x86) / java / jdk1_6_21

якщо не можна редагувати, знайдіть netbeans.cnf та внесіть зміни, як зазначено в jdk_home. перезапустіть neatbeans і як це працює У мене була та ж проблема, але я працював.


0

У мене було багато проблем з підключенням до MySQL з 64-розрядного ноутбука під управлінням Windows 7 за допомогою MS Access 2010. Я знайшов попередню статтю дуже корисною, але все одно не зміг підключитися за допомогою odbc 3.5.1. Оскільки я раніше зв’язував 32-розрядну машину за допомогою Connector / ODBC 5.1.13, я завантажив цю версію та налаштував її, дотримуючись наведених вище інструкцій. Успіху. Відповідь полягає в тому, щоб спробувати різні версії Connector.odbc.


0

Якщо ви підключаєтеся з 64-розрядної платформи за допомогою 32-розрядного драйвера, запустіть виконуваний файл C: \ Windows \ SysWOW64 \ odbcad32.exe і створіть DSN. Це спрацює.


0

Я зіткнувся з цією проблемою під час оновлення до сервера Windows 7 з деякими застарілими програмами CLASP. Спроба запустити 32-бітну програму на 64-бітній машині.

Спробуйте встановити для 32-бітової сумісності пулів додатків значення True та / або створити dsn-файли в 32 та 64 бітах.

Відкрийте вікно джерела даних odbc в обох версіях із вікна запуску. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Я зіткнувся з цією проблемою. Це пов’язано з архітектурою вашого комп’ютера та архітектурою баз даних, яку ви використовуєте.

Якщо ви використовуєте 32-бітну операційну систему, тоді все працює добре, оскільки ви можете встановити лише 32-бітне програмне забезпечення. Проблема виникає, коли ви використовуєте 64-бітну операційну систему.

Для того, щоб вирішити цю проблему просто - я зайняв багато часу, щоб виявити цю проблему.

  1. Знання вашої операційної системи становить 64 біти, а Microsoft Office - 32 біти.
  2. Отже, щоб ви могли отримати доступ до бази даних за допомогою IDE NetBean (припускаючи, що ви використовуєте це), вам потрібно встановити 32-бітний JDK. Якщо ви встановили 64 біти, вам доведеться видалити його та встановити 32 біти.

Ви не можете отримати доступ до бази даних, оскільки ваші 64-бітні JVM не є такими, як 32-бітні JVM.

Щоб додати базу даних у вашу систему: 1. Панель управління 2. Інструменти адміністратора 3. Джерело даних (ODBC) клацніть правою кнопкою миші, змініть ціль на \ sysWOW64 \ odbcad32.exe, змініть старт на r% \ SysWOW64

Тоді ти повинен мати можливість бігати. Повідомте мене, якщо у вас є якісь проблеми з цим.

Дякую!


0

Я виправив помилку.

Виконайте кроки:

  1. Встановіть JDK 32-бітної версії
  2. Встановіть MS-Office 2007
  3. Налаштування панелі керування: a. Панель управління b. Інструменти адміністратора c. Джерело даних (ODBC)

    клацніть правою кнопкою миші, щоб змінити ціль, щоб \sysWOW64\odbcad32.exeзмінити старт наr%\SysWOW64

Виконайте це і найкраща удача. Працює в Windows 7, а також 8

Видаліть новішу версію MS-Office та встановіть лише MS-Office 2007, якщо проблема не зникне


0

Щоб вирішити цю проблему, переконайтеся, що ваше програмне забезпечення Java має бути 32-бітною версією, якщо це 64-розрядна версія, воно чітко покаже помилку невідповідності, тому спробуйте перевстановити 32-бітну версію Java та запустіть програму Java за командою c:\windows\sysWOW64\odbcad32.exe(найпростішим для скопіюйте та вставте у діалогове вікно запуску) цього досить, щоб ваша програма точно працювала


0

я думаю, це також буде більш корисним.

для архітектурного пропуску матчу,

я просто скопіюю файл jdk з 32-бітового файлу C: \ Program Files (x86) \ Java \ jdk1.7.0_71 і вставлю його в 64-бітний файл C: \ Program Files \ Java \ jdk1.7.0_10, потім перейменуйте файл відповідно до файлу, який ви замінюєте, щоб уникнути помилки IDE (netbeans)

тоді вам добре йти.

Примітка. Вам слід зібрати 64-бітні файли, щоб, коли ви хочете створити 64-розрядну програму, ви могли повернути її на місце


Hacky McHack Hack :(
Gareth

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.