Câu hỏi DSN được chỉ định chứa kiến ​​trúc không khớp giữa Trình điều khiển và Ứng dụng. JAVA


Tôi đang cố gắng để kết nối với một cơ sở dữ liệu được thực hiện bởi MS Access bằng cách sử dụng Java, nhưng tôi dường như không thể quản lý. Tôi đang sử dụng ODBC và tôi nhận được ngoại lệ này:

java.sql.SQLException: [Microsoft] [Trình quản lý trình điều khiển ODBC] DSN được chỉ định chứa kiến ​​trúc không khớp giữa Trình điều khiển và Ứng dụng

Java của tôi:

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


gốc


Bạn đang sử dụng một jvm 64-bit? Nếu vậy, bạn cần một trình điều khiển odbc 64 bit. - dogbane
Vâng, tôi nghĩ là vậy. Tôi đã tìm thấy phiên bản 64 bit của odbc trong C: \ Windows \ SysWOW64 nhưng nó không giống với phiên bản mà bảng điều khiển bật. - user1028408
Không thể cài đặt trình điều khiển 64 bit khiến các sản phẩm văn phòng khác của tôi là 32 bit: / - DavidVdd


Các câu trả lời:


Không ai trong số này đã làm điều đó cho tôi. Tôi đã tìm thấy câu trả lời trên MSDN. Có những gợi ý cho nó mặc dù. Kiến trúc trong lỗi được đề cập đến 32 vs 64 bit. Giải pháp của tôi là tìm ra ứng dụng của tôi đang chạy dưới (Access) vào năm 2010 là 32b. Tôi tìm thấy điều này bằng cách tìm trong tab Process của Task Manager, trong đó tất cả các tiến trình 32b đều có * 32 phần cuối tên của chúng. Như đã nói, bảng điều khiển sẽ khởi chạy 64 phiên bản bit của ODBC từ đây

c:\windows\system32\odbcad32.exe

và phiên bản 32 bit ở đây:

c:\windows\sysWOW64\odbcad32.exe (dễ nhất để sao chép và dán vào hộp thoại chạy)

Vì vậy, tôi thiết lập DSN với các tên kết thúc bằng 32 và 64 trong mỗi bảng điều khiển ODBC tương ứng (Quản trị viên AKA) chỉ đến cùng một điều. Sau đó, tôi chọn / chọn chính xác dựa trên việc ứng dụng sử dụng nó là 32b hay 64b.


114
2017-09-21 19:59



tôi đã thử phiên bản 64 bit và chạy nó như là quản trị viên, nhưng nó cũng không hoạt động !! - Fatima Zohra
Phải có chút hài hòa. Nếu ứng dụng là 32, phải có cấu hình 32 bit cho ứng dụng đó. Nếu ứng dụng là 64, bạn phải có một trong số đó là 64. Tôi không thử tạo cấu hình có cùng tên vì tôi không muốn chúng không đồng bộ (quên thay đổi cả hai cùng một lúc). Bạn đã không cung cấp cho tôi đủ thông tin để cố gắng đưa ra đề xuất. Tôi hy vọng bạn đã tìm ra. (Tại sao họ không thể làm điều rất đơn giản và tạo ra một ứng dụng 64 bit có cấu hình cả môi trường 64 và 32 bit ???) - Pecos Bill
Và như đã nêu dưới đây chưa rõ ràng, các trình điều khiển liên quan cũng phải phù hợp (có lẽ tốt nhất để cài đặt cả 32 và 64) mặc dù tôi không nghĩ rằng bạn có thể chọn trình điều khiển nếu nó không phải là kiến ​​trúc thích hợp. - Pecos Bill
Điều này cũng giúp tôi giải mã lý do tại sao Excel 32 bit của tôi không thể kết nối với Máy chủ Hoop Hadoop của chúng tôi bằng Trình điều khiển 64 bit Cloudea Hive ODBC. Khi tôi chuyển sang đầu nối 32 bit, nó hoạt động rất tốt! - Mark Vickery
Vì vậy, để được rõ ràng: Bạn không thể thiết lập kết nối ODBC PostgreSQL 32 bit thông qua GUI Windows thông thường trên hệ thống 64 bit. Thay vào đó, bạn cần đóng Quản trị viên nguồn dữ liệu ODBC (nếu nó hiện đang mở), hãy chạy c:\windows\sysWOW64\odbcad32.exe và định cấu hình kết nối từ đó. Sau đó, bạn có thể sử dụng kết nối đó trong chương trình 32 bit để truy cập cơ sở dữ liệu. - Ajedi32


Bạn gặp lỗi chính xác này khi cố gắng kết nối với cơ sở dữ liệu MySQL từ MS-Access khi phiên bản bit (32 vs 64) của Access không khớp

  1. phiên bản bit của trình điều khiển ODBC bạn đang sử dụng
  2. phiên bản bit của Trình quản lý ODBC mà bạn đã sử dụng để thiết lập nó.

Đối với những người bạn đang cố gắng kết nối MS-Access với MySQL trên một hệ thống Windows 64 bit, tôi đã trải qua sự tra tấn tuyệt đối cố gắng làm cho nó hoạt động với cả MS-Access 2010 và MS-Access 2013. Cuối cùng nó hoạt động, và đây là những bài học tôi đã học được trên đường đi:

Tôi đã mua một máy tính xách tay Windows 7, 64 bit mới và tôi có một ứng dụng dựa trên MS-Access sử dụng các bảng MySQL.

  1. Tôi đã cài đặt phiên bản mới nhất của MySQL, 5.6, sử dụng cài đặt gói All In One. Điều này cho phép bạn cài đặt cả cơ sở dữ liệu và trình điều khiển ODBC cùng một lúc. Đó là tốt đẹp, nhưng trình điều khiển ODBC nó cài đặt có vẻ là 64 bit, vì vậy nó sẽ không hoạt động với 32 bit MS-Access. Nó cũng có vẻ hơi lỗi - không chắc chắn về cái đó. Khi bạn thêm một DSN mới trong trình quản lý ODBC, trình điều khiển này sẽ xuất hiện dưới dạng "Microsoft ODBC cho Oracle". Tôi không thể làm cho cái này hoạt động được. Tôi đã phải cài đặt 32 bit một, thảo luận dưới đây.

    • MySQL đã hoạt động tốt sau khi cài đặt. Tôi đã khôi phục cơ sở dữ liệu MySQL ứng dụng của mình theo cách thông thường. Bây giờ tôi muốn kết nối với nó bằng cách sử dụng MS-Access.


  2. Trước đây tôi đã cài đặt Office 2013, mà tôi giả định là 64 bit. Nhưng khi kiểm tra phiên bản (File, Account, About Access), tôi thấy rằng nó là 32 bit. Cả Access 2010 và 2013 thường được bán dưới dạng phiên bản 32 bit.

  3. Máy của tôi là một máy 64 bit. Vì vậy, theo mặc định, khi bạn đi để thiết lập DSN của bạn cho MS-Access, và đi theo cách thông thường vào ODBC Manager thông qua Control Panel, Administrative Options, bạn sẽ có trình quản lý ODBC 64 bit. Bạn không có cách nào để biết điều đó! Bạn không thể nói được. Đây là một bản ghi nhớ khổng lồ !! Không thể thiết lập DSN từ đó và kết nối thành công với MS Access 32 bit. Bạn sẽ nhận được lỗi đáng sợ:

    "dsn được chỉ định chứa kiến ​​trúc không phù hợp ..."

  4. Bạn phải tải xuống và cài đặt trình điều khiển ODBC 32 bit từ MySQL. Tôi đã sử dụng phiên bản 3.5.1

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

  5. Bạn phải thông báo cho ODBC Manager trong Control Panel để đi lang thang và thay vào đó phải gọi một cách rõ ràng trình quản lý ODBC 32 bit với lệnh này được thực thi tại dấu nhắc lệnh Start, Command:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Tôi đã tạo một lối tắt cho màn hình này trên màn hình của mình. Từ đây, hãy xây dựng DSN của bạn với người quản lý này. Điểm quan trọng: BUILD THEM AS SYSTEM DSNS, NOT USER DSNS! Điều này vấp tôi một lúc.

    Nhân tiện, phiên bản 64 bit của trình quản lý ODBC cũng có thể được chạy một cách rõ ràng như:

    c: \ windows \ system32 \ odbcad32.exe

  6. Khi bạn đã cài đặt Trình điều khiển ODBC 32 bit từ MySql, khi bạn bấm Thêm trong Trình quản lý ODBC, bạn sẽ thấy 2 trình điều khiển được liệt kê. Chọn "MySQL ODBC 5.2 ANSI Driver". Tôi đã không thử trình điều khiển UNICODE.


Điều đó làm điều đó. Khi bạn đã xác định DSN của bạn trong trình quản lý ODBC 32 bit, bạn có thể kết nối với MySQL theo cách thông thường từ bên trong Access - External Data, ODBC Database, Link to the Database, chọn Machine Data Source và DSN mà bạn đã tạo cho MySQL của mình cơ sở dữ liệu sẽ ở đó.


23
2018-06-22 01:36



cảm ơn tất cả các chi tiết! - Dirk Hartzer Waldeck
Tôi nghĩ rằng bạn đã chuyển đổi xung quanh các đường dẫn cho hai nhà quản lý ODBC 32 bit: c:\windows\system32\odbcad32.exe  64 bit: c:\windows\sysWOW64\odbcad32.exe - Jrgns
@ Jrgns Không, họ không được chuyển. sysWOW64 thực ra là thư mục 32-bit. Windows thích gây nhầm lẫn. Bạn sẽ biết bạn đang sử dụng phiên bản nào vì nó sẽ hiển thị (32-bit) hoặc (64-bit) trong thanh tiêu đề của ODBC Data Source Administrator. - Tim Leaf


Có một kiến ​​trúc không khớp. Trình điều khiển JDBC và JDK của bạn phải có cùng kiến ​​trúc. Nếu bạn sử dụng trình điều khiển 32 bit và JDK của bạn là 64 bit, bạn sẽ nhận được lỗi đó.

Xem điều này

Khắc phục: Phụ thuộc vào kiến ​​trúc của bạn.

Bạn sẽ cần trình điều khiển 64 bit nếu Java của bạn là 64 bit.

Tải về : http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=vi


8
2018-01-17 14:07



Làm thế nào để tôi sửa chữa nó? - user1028408
tải xuống ngay bây giờ. - user1028408
Tôi đã tải xuống và thử chuỗi kết nối mới như đã được chỉ định trong hướng dẫn nhưng vẫn không hoạt động. Có lẽ tôi đang làm gì đó sai? - user1028408


Theo mặc định, Dấu nhắc Lệnh được kết nối với System32. Chạy lời nhắc lệnh 64 bit, tức là, C:\WINDOWS\SYSWOW64\CMD.EXE. Trong đó, biên dịch và chạy ứng dụng java của bạn.


2
2017-07-08 05:28





Vấn đề bạn đang phải đối mặt có thể là do: bạn đã có Office 32 bit và Command Prompt 64 bit. Để giải quyết vấn đề bạn cần làm theo 2 bước:

  1. Mở trình quản lý ODBC cho DSN bằng cách sử dụng: C: \ Windows \ SysWOW64 \ odbcad32.exe Điều này sẽ mở ODBC Data Administrator cho phiên bản 32 bit và bạn sẽ thấy tất cả các trình điều khiển cơ sở dữ liệu.

  2. Sau đó, bạn cần mở lời nhắc lệnh 32 bit bằng cách sử dụng: C: \ Windows \ SysWOW64 \ cmd.exe Điều này sẽ mở ra phiên bản 32 bit của dấu nhắc lệnh. Trong CMD mới này, hãy biên dịch lại chương trình Java của bạn và chạy chương trình của bạn.

Hy vọng điều này sẽ giúp.


1
2017-12-26 17:40





Một chút trễ, nhưng kể từ khi tôi đã chạy vào cùng một vấn đề, trong kịch bản chính xác của bạn, tôi figured tôi muốn thêm giải pháp của tôi.

Tôi có Windows 7 (64 bit) và Office 2010 (32 bit). Tôi đã thử với chuỗi kết nối DSN-less:

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

và tôi đã thử kết nối DSN, sử dụng cả hai phiên bản System32 và SysWOW64 của ODBC Admin và không có phiên bản nào trong số đó hoạt động.

Những gì cuối cùng đã làm việc, là để phù hợp với phiên bản bit của Java với phiên bản bit của Office. Một khi tôi đã làm điều đó, tôi có thể sử dụng một trong hai DSN hoặc DSN ít chế độ kết nối, mà không có bất kỳ phiền phức.


1
2018-05-18 22:13



Tôi ngụ ý điều này từ câu trả lời của Mob, nhưng cảm ơn vì đã xác nhận. Thật là một mớ hỗn độn! - Kevin Bowersox


Tôi đã thấy câu trả lời này và nó đã làm việc cho tôi. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Sau khi bạn đã cài đặt trình điều khiển ODBC từ chương trình cài đặt của trình điều khiển, bạn có thể xác định một hoặc nhiều nguồn dữ liệu cho nó. Tên nguồn dữ liệu (DSN) sẽ cung cấp một mô tả duy nhất của dữ liệu; ví dụ: Bảng lương hoặc Tài khoản phải trả. Các nguồn dữ liệu người dùng và hệ thống được xác định cho tất cả các trình điều khiển hiện được cài đặt được liệt kê trong các tab DSN của người dùng hoặc DSN hệ thống của hộp thoại Quản trị viên nguồn dữ liệu ODBC. Các nguồn dữ liệu tập tin trong một thư mục nhất định được liệt kê trong tab File DSN; thư mục được hiển thị được nhập vào hộp Tìm trong tab DSN tệp. System_CAPS_noteNote

Để quản lý nguồn dữ liệu kết nối với trình điều khiển 32 bit trong nền tảng 64 bit, hãy sử dụng c: \ windows \ sysWOW64 \ odbcad32.exe. Để quản lý nguồn dữ liệu kết nối với trình điều khiển 64 bit, hãy sử dụng c: \ windows \ system32 \ odbcad32.exe. Trong Công cụ quản trị trên hệ điều hành Windows 8 64 bit, có các biểu tượng cho cả hộp thoại Quản trị viên nguồn dữ liệu ODBC 32 bit và 64 bit.

Nếu bạn sử dụng odbcad32.exe 64 bit để định cấu hình hoặc loại bỏ DSN kết nối với trình điều khiển 32 bit, ví dụ: Trình điều khiển Microsoft Access (* .mdb), bạn sẽ nhận được thông báo lỗi sau:

DSN được chỉ định chứa kiến ​​trúc không khớp giữa Trình điều khiển và Ứng dụng

Để giải quyết lỗi này, hãy sử dụng odbcad32.exe 32 bit để định cấu hình hoặc loại bỏ DSN.

Nguồn dữ liệu liên kết một trình điều khiển ODBC cụ thể với dữ liệu bạn muốn truy cập thông qua trình điều khiển đó. Ví dụ, bạn có thể tạo nguồn dữ liệu để sử dụng trình điều khiển ODBC dBASE để truy cập một hoặc nhiều tệp dBASE được tìm thấy trong một thư mục cụ thể trên đĩa cứng hoặc ổ đĩa mạng của bạn. Sử dụng Quản trị viên nguồn dữ liệu ODBC, bạn có thể thêm, sửa đổi và xóa nguồn dữ liệu, như được mô tả trong bảng sau.


1
2017-12-07 11:01



Xin chào Bineesh Kumar, xin vui lòng giải thích breafly - Raj Kumar


Trước tiên bạn đã tạo DSN trong Bảng điều khiển> Công cụ quản trị> ODBC> DSN hệ thống. Đặt tên nó giống như "myDatabase" và nếu tôi yêu cầu định vị tệp cơ sở dữ liệu / truy cập, hãy chỉ định đường dẫn bằng cách sử dụng tùy chọn duyệt. Một khi DSN ur sẽ được tạo thành công, bạn sẽ dễ dàng truy cập vào DB của bạn.


0
2018-01-17 14:09



Tôi tạo DSN của tôi với ODBC tôi tìm thấy trong C: \ Windows \ SysWOW64 ... Một trong bảng điều khiển đã gần như không trình điều khiển lưu những cái cho máy chủ sql. - user1028408
sau đó bạn phải cài đặt các trình điều khiển bởi vì không có những trình điều khiển bạn không thể làm cho kết nối ODBC. - Ankur Jain
bạn có liên kết đến những người lái xe này không? Tôi đã thử cài đặt một số nhưng chúng không hoạt động. - user1028408
microsoft.com/download/en/details.aspx?id=13255, microsoft.com/download/en/details.aspx?id=23734 - Ankur Jain
Tôi đã tải xuống và thay thế chuỗi kết nối: Connection dbConnection = DriverManager.getConnection ("Driver = {Trình điều khiển truy cập Microsoft (*. Mdb, * .accdb)}; DBQ = C: \\ Người dùng \\ Chủ sở hữu \\ Tài liệu \\ myDatabase .mdb "," quản trị "," "); nhưng nó vẫn gây rắc rối cho tôi. Có lẽ tôi cần phải thay đổi một cái gì đó khác trong mã? - user1028408


Nếu bạn đang sử dụng netbeans đi đến tools-> java Platform, thay đổi jdk_home trỏ tới c: / programfiles / java / jdk1_7 thành c: programFiles (x86) / java / jdk1_6_21

nếu không thể chỉnh sửa tìm netbeans.cnf và thực hiện thay đổi như đã nêu abouve cho jdk_home. khởi động lại neatbeans và cách nó hoạt động Tôi đã có cùng một vấn đề, nhưng tôi đã làm việc.


0
2018-06-07 04:46





Tôi đã gặp rất nhiều rắc rối khi liên kết với MySQL từ máy tính xách tay 64 bit, chạy Windows 7, sử dụng MS Access 2010. Tôi thấy bài viết trước rất hữu ích, nhưng vẫn không thể kết nối bằng odbc 3.5.1. Như trước đây tôi đã liên kết một máy 32 bit sử dụng Connector / ODBC 5.1.13, tôi đã tải xuống phiên bản đó và thiết lập nó bằng cách sử dụng các hướng dẫn ở trên. Sự thành công. Câu trả lời có vẻ là thử các phiên bản khác nhau của Connector.odbc.


0
2017-12-29 20:59





Nếu bạn đang kết nối từ nền tảng 64 bit bằng trình điều khiển 32 bit, hãy chạy tệp thực thi C: \ Windows \ SysWOW64 \ odbcad32.exe và tạo DSN. Nó sẽ hoạt động.


0
2018-04-04 17:30