Soru Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyumsuzluğu içeriyor. JAVA


MS Access tarafından Java kullanılarak yapılan bir veritabanına bağlanmaya çalışıyorum, ancak yönetemiyorum. ODBC kullanıyorum ve bu özel durumu alıyorum:

java.sql.SQLException: [Microsoft] [ODBC Sürücü Yöneticisi] Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyumsuzluğu içeriyor

Java'm:

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


Menşei


64 bit jvm kullanıyor musunuz? Eğer öyleyse, 64 bitlik bir odbc sürücüsüne ihtiyacınız var. - dogbane
Evet, sanırım öyleyim. Odbc'nin 64bit sürümünü C: \ Windows \ SysWOW64'de buldum, ancak kontrol panelinin açtığı aynı değil. - user1028408
64bit sürücüyü yükleyemiyorum çünkü diğer ofis ürünlerim 32bit'dir: / - DavidVdd


Cevaplar:


Bunların hiçbiri benim için yapmadı. Yanıtı MSDN'de buldum. Bununla ilgili ipuçları vardı. Hata mimarisi 32 vs 64 bite atıfta bulunuyor. Çözümüm, uygulamasının altında çalıştığını (Access) 2010 yılında 32b olduğunu öğrenmek oldu. Bunu, tüm 32b işlemlerinin * 32 adlarının sonuna sahip olduğu Görev Yöneticisi'nin İşlem sekmesine bakarak buldum. Söylendiği gibi, kontrol paneli 64 buradan ODBC'nin bit sürümü

c:\windows\system32\odbcad32.exe

ve 32 bit sürümü burada:

c:\windows\sysWOW64\odbcad32.exe (kopyalamak ve çalıştır iletişim kutusuna yapıştırmak için en kolay)

Bu yüzden DSN'leri 32 ve 64 ile biten isimlerin her birine karşılık gelen ODBC kontrol panellerinde (AKA Yöneticisi) aynı şeyi işaret ettim. Ardından, uygulamayı kullanan kişinin 32b veya 64b olup olmadığına bağlı olarak doğru olanı seçtim / seçtim.


114
2017-09-21 19:59



64 bit sürümü denedim ve yönetici olarak çalıştırdım, ama aynı zamanda çalışmıyor! - Fatima Zohra
Biraz uyum olmalı. Uygulama 32 ise, bunun için 32 bitlik bir yapılandırma olmalıdır. Eğer uygulama 64 ise, bunun 64 olması gerekir. Aynı adda bir yapılandırma oluşturmayı denemedim çünkü senkronizasyondan kurtulmak istemedim (aynı anda ikisini de değiştirmeyi unut). Önerilerinizi sunmaya çalışmak için bana yeterince bilgi vermediniz. Umarım bunu anladın. (Neden bu kadar basit bir şey yapamazlar ve hem 64 hem de 32 bit ortamları yapılandıran bir 64 bit uygulama oluşturamazlar ???) - Pecos Bill
Ve aşağıda belirtildiği gibi, henüz açık değil, ilgili sürücüler de (muhtemelen 32 ve 64'ü kurmak için en iyisi) eşleşmelidir, ancak eğer uygun bir mimari değilse sürücüyü seçebileceğinizi düşünmüyorum. - Pecos Bill
Bu ayrıca 32bit Excel'in neden 64bit Cloudea Hive ODBC Sürücüsünü kullanarak Hadoop Hive Server'ımıza bağlanamadığını deşifre etti. 32bit konektöre geçtikten sonra harika çalıştı! - Mark Vickery
Açık olmak gerekirse: Sen olamaz 64 bit sistemde normal Windows GUI aracılığıyla bir 32 bit PostgreSQL ODBC bağlantısı kurmak. Bunun yerine ODBC Veri Kaynağı Yöneticisini kapatmanız gerekir (eğer şu anda açıksa), çalıştırın c:\windows\sysWOW64\odbcad32.exe ve bağlantıyı buradan yapılandırabilirsiniz. Daha sonra bu bağlantıyı veritabanına erişmek için 32 bit programda kullanabilirsiniz. - Ajedi32


Access'in bit sürümü (32 vs 64) eşleşmediğinde MS-Access'ten bir MySQL veritabanına bağlanmaya çalışırken aynı hatayı alırsınız.

  1. Kullandığınız ODBC Sürücüsünün bit sürümü
  2. kurmak için kullandığınız ODBC Yöneticisi'nin bit sürümü.

MS-Access'i 64 bit Windows sisteminde MySQL'e bağlamaya çalıştığınız için, hem MS-Access 2010 hem de MS-Access 2013 ile çalışmayı denemeye çalışan işkenceden geçtim. Sonunda işe yaradı ve işte burada. yol boyunca öğrendiğim dersler:

Yeni bir Windows 7, 64 bit dizüstü bilgisayar aldım ve MySQL tablolarını kullanarak MS Access'e dayanan bir uygulama var.

  1. All In One paketi yüklemesini kullanarak MySQL, 5.6'nın en son sürümünü yükledim. Bu, hem veritabanı hem de ODBC sürücülerini bir kerede yüklemenizi sağlar. Bu güzel, ama yükler ODBC sürücüsü 64 bit biri gibi görünüyor, bu yüzden 32 bit MS-Access ile çalışmayacak. Aynı zamanda küçük bir araba gibi görünüyor. ODBC Yöneticisi'nde yeni bir DSN eklediğinizde, bu sürücü "Oracle için Microsoft ODBC" olarak görünür. Bunu çalışmak için alamadım. Aşağıda tartışılan 32 bit'i yüklemeliydim.

    • MySQL, kurulumdan sonra iyi çalışıyordu. Uygulama MySQL veritabanını her zamanki gibi geri yükledim. Şimdi MS-Access kullanarak bağlanmak istiyorum.


  2. Daha önce 64 bit olduğunu düşündüğüm Office 2013'ü yüklemiştim. Ancak sürümü (Dosya, Hesap, Erişim Hakkında) kontrol ederek, bunun 32 bit olduğunu görüyorum. Access 2010 ve 2013'ün her ikisi de en yaygın olarak 32 bit sürüm olarak satılmaktadır.

  3. Makinem 64 bitlik bir makinedir. Varsayılan olarak, DSN'nizi MS-Access için kurduğunuzda ve Denetim Masası, Yönetimsel Seçenekler aracılığıyla ODBC Yöneticisi'ne her zamanki şekilde girdiğinizde, 64 bit ODBC yöneticisine sahip olursunuz. Bunu bilmenin bir yolu yok! Sadece anlatamazsın. Bu büyük bir gotcha var! Bir DSN'yi buradan kurmak ve MS Access 32 bit'e başarıyla bağlanması imkansızdır. Korkunç bir hatayı alacaksın:

    "belirtilen dsn bir mimari uyumsuzluğu içeriyor ..."

  4. MySQL'den 32 bit ODBC sürücüsünü indirip yüklemeniz gerekir. 3.5.1 sürümünü kullandım

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

  5. Denetim Masası'ndaki ODBC Yöneticisi'ne bir zam yapılmasını söylemelisiniz ve bunun yerine, Başlat, Komut isteminde yürütülen bu komutla 32 bit ODBC Yöneticisi'ni açıkça çağırması gerekir:

    C: \ windows \ SysWOW64 \ odbcad32.exe

    Masaüstümde bunun için bir kısayol oluşturdum. Buradan DSN'nizi bu yönetici ile oluşturun. Önemli nokta: SİSTEM DSNS OLARAK, KULLANICI DSNS DEĞİL! Bu beni bir süreliğine düşürdü.

    Bu arada, ODBC Yöneticisi'nin 64 bit sürümü de aşağıdaki gibi çalıştırılabilir:

    C: \ WINDOWS \ system32 \ odbcad32.exe

  6. MySql'den 32 bit ODBC sürücüsünü kurduktan sonra, ODBC Yöneticisi'nde Ekle'yi tıklattığınızda listelenen 2 sürücüyü göreceksiniz. "MySQL ODBC 5.2 ANSI Sürücüsü" nü seçin. UNICODE sürücüsünü denemedim.


Bu öyle. DSN'lerinizi 32 bit ODBC yöneticisinde tanımladıktan sonra, MySQL'e Access - External Data, ODBC Veritabanı, Veritabanına Bağla, Machine Data Source ve MySQL'inize oluşturduğunuz DSN içinden normal şekilde bağlanabilirsiniz. veritabanı orada olacak.


23
2018-06-22 01:36



tüm ayrıntılar için teşekkürler! - Dirk Hartzer Waldeck
İki ODBC Yöneticisi'nin yollarını değiştirdiğini düşünüyorum. 32 bit: c:\windows\system32\odbcad32.exe  64 bit: c:\windows\sysWOW64\odbcad32.exe - Jrgns
@Jrgns Hayır, değiştirilmiyorlar. sysWOW64 aslında 32 bit dizinidir. Windows kafa karıştırıcı olmayı sever. Hangi sürümü kullandığınızı bileceksiniz, çünkü ODBC Veri Kaynağı Yöneticisi'nin başlık çubuğunda (32 bit) veya (64 bit) gösterecektir. - Tim Leaf


Bir mimari uyumsuzluğu var. JDBC Sürücünüz ve JDK'nız aynı mimaride olmalıdır. 32bit Sürücünüz ve JDK'nız 64 bit ise, bu hatayı alırsınız.

Görmek bu

Düzeltme: Mimarinize bağlı.

Java'nız 64-bit ise, 64-bit sürücülere ihtiyacınız olacaktır.

İndir: http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en


8
2018-01-17 14:07



Nasıl düzeltebilirim? - user1028408
şimdi indiriliyor. - user1028408
Onu indirdim ve talimatlarda belirtildiği gibi yeni bağlantı dizesini denedim ama hala işe yaramadı. Belki yanlış bir şey yapıyorum? - user1028408


Varsayılan olarak, Komut İstemi, System32'ye bağlanır. 64 bitlik bir komut istemi çalıştırın, örn. C:\WINDOWS\SYSWOW64\CMD.EXE. Bu, java uygulamanızı derleyin ve çalıştırın.


2
2017-07-08 05:28





Karşılaştığınız sorun şu olabilir: Office 32 bit ve Command Prompt 64 bit kullanıyordunuz. Sorunu çözmek için 2 adımı izlemeniz gerekir:

  1. DSN için ODBC Yöneticisi'ni açın: C: \ Windows \ SysWOW64 \ odbcad32.exe Bu 32 bit sürümü için ODBC Veri Yöneticisi'ni açacak ve tüm veritabanı sürücülerini göreceksiniz.

  2. Bundan sonra aşağıdakileri kullanarak 32 bit komut istemini açmanız gerekir: C: \ Windows \ SysWOW64 \ cmd.exe Bu komut isteminin 32 bit sürümünü açacaktır. Bu yeni CMD'de lütfen Java programınızı yeniden derleyin ve programınızı çalıştırın.

Umarım bu yardımcı olur.


1
2017-12-26 17:40





Biraz geç, ama aynı probleme girdiğimden, tam senaryonuzda, çözümümü ekleyeceğimi düşündüm.

Windows 7 (64-bit) ve Office 2010 (32-bit) var. DSN'siz bağlantı dizesiyle denedim:

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

ve ODBC Yöneticisi'nin hem System32 hem de SysWOW64 sürümlerini kullanarak DSN bağlantısıyla denedim ve bunların hiçbiri işe yaramadı.

Sonunda neyin işe yaradığı, Java'nın bit sürümünü Office'in bit sürümü ile eşleştirmek oldu. Bunu yaptıktan sonra, DSN veya DSN daha az bağlantı modunu herhangi bir karışıklık olmadan kullanabilirdim.


1
2018-05-18 22:13



Bunu Mob'un cevabından ima ettim, ancak onaylama için teşekkürler. Ne dağınıklık! - Kevin Bowersox


Bu cevabı gördüm ve benim için çalıştı. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Sürücünün kurulum programından bir ODBC sürücüsü yükledikten sonra, bunun için bir veya daha fazla veri kaynağı tanımlayabilirsiniz. Veri kaynağı adı (DSN), verilerin benzersiz bir tanımını sağlamalıdır; örneğin, Bordro veya Borç Hesapları. Şu anda yüklü olan tüm sürücüler için tanımlanan kullanıcı ve sistem veri kaynakları ODBC Veri Kaynağı Yöneticisi iletişim kutusunun Kullanıcı DSN veya Sistem DSN sekmelerinde listelenir. Belirli bir dizindeki dosya veri kaynakları Dosya DSN sekmesinde listelenir; Gösterilecek dizin Dosya DSN sekmesindeki Gözat kutusuna girilir. System_CAPS_noteNote

64 bit platformunda 32 bit sürücüye bağlanan bir veri kaynağını yönetmek için c: \ windows \ sysWOW64 \ odbcad32.exe aracını kullanın. 64 bit sürücüye bağlanan bir veri kaynağını yönetmek için c: \ windows \ system32 \ odbcad32.exe aracını kullanın. 64 bit Windows 8 işletim sisteminde Yönetimsel Araçlar'da, hem 32 bit hem de 64 bit ODBC Veri Kaynağı Yöneticisi iletişim kutusu için simgeler vardır.

32 bit sürücüye bağlanan bir DSN'yi yapılandırmak veya kaldırmak için 64 bit odbcad32.exe aracını kullanırsanız, örneğin, Microsoft Access sürücüsü (* .mdb), aşağıdaki hata iletisini alırsınız:

Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyumsuzluğu içeriyor

Bu hatayı gidermek için DSN'yi yapılandırmak veya kaldırmak için 32 bit odbcad32.exe aracını kullanın.

Bir veri kaynağı, belirli bir ODBC sürücüsünü, o sürücüden erişmek istediğiniz veriyle ilişkilendirir. Örneğin, sabit diskinizdeki veya bir ağ sürücünüzdeki belirli bir dizinde bulunan bir veya daha fazla dBASE dosyasına erişmek için ODBC dBASE sürücüsünü kullanmak üzere bir veri kaynağı oluşturabilirsiniz. ODBC Veri Kaynağı Yöneticisi'ni kullanarak, aşağıdaki tabloda açıklandığı gibi veri kaynaklarını ekleyebilir, değiştirebilir ve silebilirsiniz.


1
2017-12-07 11:01



Merhaba Bineesh Kumar, lütfen breafly açıklayabilir misiniz - Raj Kumar


DSN'yi önce Denetim Masası> Yönetimsel Araçlar> ODBC> Sistem DSN'sinde oluşturdunuz. "MyDatabase" ile aynı adı verin ve eğer ben veritabanı / erişim dosyasını bulmak için soruyorsanız, gözat seçeneğini kullanarak yolu belirtin. Ur DSN başarıyla oluşturulduğunda, DB'ye kolayca erişebileceksiniz.


0
2018-01-17 14:09



Ben DSN'imi C: \ Windows \ SysWOW64 içinde bulduğum ODBC ile oluşturdum ... Kontrol panelindeki bir tanesinin sürücüleri neredeyse sql server için kaydetmediği görülüyordu. - user1028408
Daha sonra sürücüleri yüklemeniz gerekir, çünkü bu sürücüler olmadan ODBC bağlantısı kuramazsınız. - Ankur Jain
Bu sürücülere bir bağlantınız var mı? Bazı yüklemeyi denedim ama çalışmadılar. - user1028408
microsoft.com/download/en/details.aspx?id=13255, microsoft.com/download/en/details.aspx?id=23734 - Ankur Jain
Bunları indirip bağlantı dizesini değiştirdim: Bağlantı dbConnection = DriverManager.getConnection ("Sürücü = {Microsoft Access Sürücüsü (*. Mdb, * .accdb)}; DBQ = C: \\ Kullanıcılar \\ Sahip \\ Belgeler \\ myDatabase .mdb", "yönetici", ""); ama hala bana sorun veriyor. Belki de koddaki başka bir şeyi değiştirmem gerek? - user1028408


Eğer netbeans kullanıyorsanız, tools -> java Platform'a gidiniz, c: / programfiles / java / jdk1_7 'yi c: programFiles (x86) / java / jdk1_6_21' a çeviren jdk_home 'i değiştirin.

düzenlenemezse netbeans.cnf dosyasını bulun ve jdk_home için belirtildiği gibi değişiklik yapın. temiz neatbeans ve nasıl çalışır Aynı problemi yaşadım, ama çalıştım.


0
2018-06-07 04:46





MS Access 2010'u kullanarak Windows 7 çalıştıran 64 bitlik bir dizüstü bilgisayardan MySQL'e bağlanırken çok fazla sorun yaşadım. Bir önceki makaleyi çok yararlı buldum, ancak yine de odbc 3.5.1 kullanarak bağlanamadım. Daha önce Bağlayıcı / ODBC 5.1.13 kullanarak bir 32 bit makineye bağladığımdan, bu sürümü indirip yukarıdaki yönergeleri kullanarak kurdum. Başarı. Cevabı Connector.odbc'nin farklı sürümlerini denemek gibi görünüyor.


0
2017-12-29 20:59





32 bit sürücü kullanarak 64 bit platformdan bağlanıyorsanız, çalıştırılabilir dosyayı çalıştırın. C: \ Windows \ SysWOW64 \ odbcad32.exe ve DSN'yi oluşturun. Çalışacak.


0
2018-04-04 17:30