Указанный DSN содержит несоответствие архитектуры между драйвером и приложением.ДЖАВА - PullRequest
81 голосов
/ 17 января 2012

Я пытаюсь подключиться к базе данных, созданной 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);
        }
    }
}

Ответы [ 18 ]

124 голосов
/ 21 сентября 2012

Ничто из этого не сделало это для меня.Я нашел ответ на MSDN.Были намеки на это, хотя.Архитектура в ошибке относится к 32 против 64 бит.Мое решение состояло в том, чтобы выяснить, под каким приложением (Access) запущено приложение 2010, 32bЯ нашел это, посмотрев на вкладку Process диспетчера задач, где все 32b процессы имеют * 32 в конце своих имен.Как уже было сказано, панель управления запустит 64 битную версию ODBC отсюда

c:\windows\system32\odbcad32.exe

, а 32-битная версия находится здесь:

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

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

25 голосов
/ 22 июня 2013

Вы получаете ту же самую ошибку при попытке подключения к базе данных 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. Это также кажется немного глючным - не обязательно на этом. При добавлении нового уведомления о доставке в диспетчере ODBC этот драйвер отображается как «Microsoft ODBC для Oracle». Я не мог заставить это работать. Мне пришлось установить 32-битную, как описано ниже.

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

    1021 *
    *

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

  3. Моя машина 64-битная. Таким образом, по умолчанию, когда вы переходите к настройке DSN для MS-Access и обычным способом заходите в ODBC Manager через Панель управления, Параметры администрирования, вы получаете 64-битный ODBC-менеджер. У тебя нет возможности узнать это! Вы просто не можете сказать. Это огромная ошибка !! Оттуда невозможно настроить DSN и успешно подключиться к 32-разрядному MS Access. Вы получите страшную ошибку:

    "указанный dsn содержит несоответствие архитектуры ..."

  4. Вы должны загрузить и установить 32-разрядный драйвер ODBC из MySQL. Я использовал версию 3.5.1

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

  5. Вы должны указать ODBC Manager на панели управления, чтобы он пошел в поход, и вместо этого он должен явно вызвать 32-разрядный ODBC Manager с помощью этой команды, выполняемой в командной строке «Пуск»:

    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. база данных будет там.

8 голосов
/ 17 января 2012

Существует несоответствие архитектуры. Ваш драйвер JDBC и ваш JDK должны иметь одинаковую архитектуру. Если вы используете 32-битный драйвер и ваш JDK 64-битный, вы получите эту ошибку.

См. это

Исправлено: зависит от вашей архитектуры.

Вам понадобятся 64-битные драйверы, если ваша Java является 64-битной.

Скачать: http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en

2 голосов
/ 08 июля 2012

По умолчанию командная строка подключена к System32. Запустите 64-разрядную командную строку, т.е. C:\WINDOWS\SYSWOW64\CMD.EXE. В этом, скомпилируйте и запустите ваше Java-приложение.

1 голос
/ 26 декабря 2012

Проблема, с которой вы столкнулись, может быть связана с тем, что у вас был Office 32 бит и командная строка 64 бит. Для решения проблемы необходимо выполнить 2 шага:

  1. Откройте ODBC Manager для DSN, используя: C: \ Windows \ SysWOW64 \ odbcad32.exe Откроется администратор данных ODBC для 32-разрядной версии, и вы увидите все драйверы базы данных.

  2. После этого вам нужно открыть 32-битную командную строку, используя: C: \ Windows \ SysWOW64 \ cmd.exe Это откроет 32-битную версию командной строки. В этом новом CMD перекомпилируйте вашу Java-программу и запустите ее.

Надеюсь, это поможет.

1 голос
/ 19 мая 2013

Немного поздно, но поскольку я столкнулся с той же проблемой, в вашем точном сценарии я решил добавить свое решение.

У меня Windows 7 (64-разрядная версия) и Office 2010(32-бит).Я попытался использовать строку подключения без DSN:

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

и попытался использовать подключение DSN, используя версии ODBC Admin для System32 и SysWOW64, но ничего из этого не получилось.

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

1 голос
/ 12 марта 2016

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

1 голос
/ 07 декабря 2015

Я видел этот ответ, и он работал для меня. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

После того, как вы установили драйвер ODBC из программы установки драйвера, вы можете определить для него один или несколько источников данных. Имя источника данных (DSN) должно предоставлять уникальное описание данных; например, платежная ведомость или кредиторская задолженность. Пользовательские и системные источники данных, определенные для всех установленных на данный момент драйверов, перечислены на вкладках Пользовательский DSN или Системный DSN диалогового окна Администратор источника данных ODBC. Источники данных файла в данном каталоге перечислены на вкладке File DSN; отображаемый каталог вводится в поле «Искать в» на вкладке «Файл DSN». System_CAPS_noteNote

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

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

Указанный DSN содержит несоответствие архитектуры между драйвером и приложением

Чтобы устранить эту ошибку, используйте 32-разрядный файл odbcad32.exe для настройки или удаления DSN.

Источник данных связывает определенный драйвер ODBC с данными, к которым вы хотите получить доступ через этот драйвер. Например, вы можете создать источник данных, чтобы использовать драйвер ODBC dBASE для доступа к одному или нескольким файлам dBASE, найденным в определенном каталоге на вашем жестком диске или сетевом диске. Используя Администратор источников данных ODBC, вы можете добавлять, изменять и удалять источники данных, как описано в следующей таблице.

0 голосов
/ 04 апреля 2014

Если вы подключаетесь с 64-битной платформы с помощью 32-битного драйвера, запустите исполняемый файл C: \ Windows \ SysWOW64 \ odbcad32.exe и создайте DSN. Это будет работать.

0 голосов
/ 16 февраля 2015

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

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