Указанный 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-битный драйвер, потому что другие мои офисные продукты 32-
битные

Ответы:


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 Administrator), которые указывали на одно и то же. Затем я выбрал / выбрал правильный, в зависимости от того, использует ли его приложение 32b или 64b.


Я пробовал 64-битную версию и запускал ее от имени администратора, но она тоже не работает !!
Fatima Zohra

2
Должна быть битовая гармония. Если приложение 32, для него должна быть 32-битная конфигурация. Если приложение 64, у вас должно быть 64. Я не пробовал создавать конфиги с одинаковыми именами, потому что не хотел, чтобы они рассинхронизировались (забудьте изменить оба файла одновременно). Вы не дали мне достаточно информации, чтобы предлагать предложения. Надеюсь, вы догадались. (Почему они не могут сделать такую ​​очень простую вещь и не создать одно 64-битное приложение, которое настраивает как 64-битные, так и 32-битные среды ???)
Пекос Билл

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

Это также помогло мне понять, почему мой 32-битный Excel не может подключиться к нашему серверу Hadoop Hive с помощью 64-битного драйвера ODBC Cloudea Hive. Как только я переключился на 32-битный разъем, все заработало отлично!
Марк Викери

2
Итак, чтобы прояснить: вы не можете установить 32-битное соединение ODBC PostgreSQL через обычный графический интерфейс Windows в 64-битной системе. Вместо этого вам нужно закрыть Администратор источника данных ODBC (если он в настоящее время открыт), запустить c:\windows\sysWOW64\odbcad32.exeи настроить соединение оттуда. Затем вы можете позже использовать это соединение в 32-битной программе для доступа к базе данных.
Ajedi32

26

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

  1. битовая версия драйвера ODBC, который вы используете
  2. битовая версия ODBC Manager, которую вы использовали для его настройки.

Для тех из вас, кто пытается подключить 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 Manager, этот драйвер отображается как «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 bit. Вы получите ужасную ошибку:

    "указанный 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 Manager также может быть запущена явно как:

    c: \ windows \ system32 \ odbcad32.exe

  6. После того, как вы установили 32-разрядный драйвер ODBC из MySql, при нажатии кнопки «Добавить» в диспетчере ODBC вы увидите в списке 2 драйвера. Выберите «MySQL ODBC 5.2 ANSI Driver». Драйвер 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 Data Source Administrator. Источники файловых данных в данном каталоге перечислены на вкладке File DSN; каталог, который будет отображаться, вводится в поле Искать на вкладке File 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 Data Administrator для 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-соединение, используя как System32, так и SysWOW64 версии ODBC Admin, и ничего из этого не сработало.

Что в итоге сработало, так это сопоставление разрядной версии Java с разрядной версией Office. Как только я это сделал, я мог без проблем использовать либо режим подключения DSN, либо режим подключения без DSN.


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

0

Вы сначала создали DSN, выбрав Панель управления> Администрирование> ODBC> Системный DSN. Назовите его так же, как «myDatabase», и если я прошу найти файл базы данных / доступа, укажите путь, используя опцию просмотра. Как только ur DSN будет успешно создан, вы легко сможете получить доступ к ur DB.


Я создал свой DSN с ODBC, который я нашел в C: \ Windows \ SysWOW64 ... На панели управления почти не было драйверов, за исключением тех, что для sql server.
user1028408

тогда вы должны установить драйверы, потому что без этих драйверов вы не можете установить соединение ODBC.
Анкур Джайн

у вас есть ссылка на эти драйверы? Я пробовал установить некоторые, но они не работали.
user1028408


Я загрузил их и заменил строку подключения: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. 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 версии 32bt
  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 :(
Гарет

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.