Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyuşmazlığı içeriyor. JAVA


86

Java kullanarak MS Access tarafından oluşturulan bir veritabanına bağlanmaya çalışıyorum, ancak yönetemiyorum. ODBC kullanıyorum ve şu istisnayı alıyorum:

java.sql.SQLException: [Microsoft] [ODBC Sürücü Yöneticisi] Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyuşmazlığı 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);
        }
    }
}

2
64 bit jvm mi kullanıyorsunuz? Eğer öyleyse, 64 bitlik bir odbc sürücüsüne ihtiyacınız var.
dogbane

1
Evet, sanırım öyleyim. Odbc'nin 64bit sürümünü C: \ Windows \ SysWOW64'te buldum ama kontrol panelinin açtığı sürümle aynı değil.
user1028408

Diğer ofis ürünlerim 32bit olduğu için 64bit sürücü yüklenemiyor: /
DavidVdd

Yanıtlar:


130

Bunların hiçbiri benim için yapmadı. Yanıtı MSDN'de buldum. Yine de ipuçları vardı. Hatadaki mimari 32'ye karşı 64 bittir. Çözümüm, 2010'un 32b olduğu (Access) altında hangi uygulamamın çalıştığını bulmaktı. Bunu, tüm 32b işlemlerinin adlarının sonunda * 32'ye sahip olduğu Görev Yöneticisi'nin İşlem sekmesine bakarak buldum. Söylendiği gibi, kontrol paneli ODBC'nin 64 bit sürümünü buradan başlatacak

c:\windows\system32\odbcad32.exe

ve 32 bit sürümü burada:

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

Bu yüzden, aynı şeyi işaret eden ilgili ODBC kontrol panellerinin (AKA Yöneticisi) her birinde 32 ve 64 ile biten isimleri olan DSN'leri kurdum. Ardından, onu kullanan uygulamanın 32b veya 64b olmasına bağlı olarak doğru olanı seçtim / seçtim.


64 bit sürümünü denedim ve yönetici olarak çalıştırdım, ancak o da çalışmıyor !!
Fatima Zohra

2
Bit uyumu olmalı. Uygulama 32 ise, bunun için 32 bitlik bir yapılandırma olmalıdır. Uygulama 64 ise, 64 olan bir uygulamaya sahip olmalısınız. Aynı isimde yapılandırmalar oluşturmayı denemedim çünkü senkronizasyondan çıkmalarını istemedim (aynı anda ikisini de değiştirmeyi unutun). Bana önerilerde bulunmaya yetecek kadar bilgi vermediniz. Umarım çözmüşsündür. (Neden bu kadar basit şeyi yapamıyorlar ve hem 64 hem de 32 bit ortamları yapılandıran tek bir 64 bit uygulama
yaratamıyorlar

Ve aşağıda belirtildiği gibi henüz açık değil, ilgili sürücülerin de eşleşmesi gerekiyor (muhtemelen hem 32 hem de 64'ü yüklemek için en iyisi), ancak doğru mimari değilse sürücüyü seçebileceğinizi düşünmüyorum.
Pecos Bill

Bu aynı zamanda, 32bit Excel'imin 64bit Cloudea Hive ODBC Sürücüsünü kullanarak Hadoop Hive Sunucumuza neden bağlanamadığını anlamama da yardımcı oldu. 32bit konektöre geçtikten sonra harika çalıştı!
Mark Vickery

2
Yani açık olmak: 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 (şu anda açıksa), c:\windows\sysWOW64\odbcad32.exeoradan bağlantıyı çalıştırıp yapılandırmanız gerekir. Daha sonra bu bağlantıyı 32 bit programda veri tabanına erişmek için kullanabilirsiniz.
Ajedi32

26

Access'in bit sürümü (32'ye karşı 64) eşleşmediğinde MS-Access'ten bir MySQL veritabanına bağlanmaya çalışırken tam olarak aynı hatayı alıyorsunuz

  1. kullandığınız ODBC Sürücüsünün bit sürümü
  2. ODBC Yöneticisinin kurulumunda kullandığınız bit sürümü.

MS-Access'i 64 bit Windows sisteminde MySQL'e bağlamaya çalışanlar için, hem MS-Access 2010 hem de MS-Access 2013 ile çalışmasını sağlamaya çalışırken katıksız bir işkenceden geçtim. Sonunda onu çalıştırdım ve işte burada yol boyunca öğrendiğim dersler:

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

  1. All In One paket kurulumunu kullanarak MySQL 5.6'nın en son sürümünü yükledim. Bu, hem veritabanını hem de ODBC sürücülerini aynı anda yüklemenizi sağlar. Bu güzel, ancak yüklediği ODBC sürücüsü 64 bit gibi görünüyor, bu nedenle 32 bit MS-Access ile çalışmayacak. Ayrıca biraz hatalı görünüyor - bundan emin değil. ODBC Yöneticisi'nde yeni bir DSN eklediğinizde, bu sürücü "Oracle için Microsoft ODBC" olarak görünür. Bunun çalışmasını sağlayamadım. Aşağıda tartışılan 32 bit olanı kurmak zorunda kaldım.

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


  2. Daha önce 64 bit olduğunu varsaydığım Office 2013'ü yüklemiştim. Ancak sürümü kontrol ettiğimde (Dosya, Hesap, Erişim Hakkında) 32 bit olduğunu görüyorum. Hem Access 2010 hem de 2013 en çok 32 bit sürümler olarak satılır.

  3. Benim makinem 64 bitlik bir makinedir. Bu nedenle, varsayılan olarak, DSN'lerinizi MS-Access için ayarlamaya gittiğinizde ve Denetim Masası, Yönetim Seçenekleri aracılığıyla ODBC Yöneticisine normal şekilde girdiğinizde, 64 bit ODBC yöneticisini elde edersiniz. Bunu bilmenin hiçbir yolu yok! Söyleyemezsin. Bu çok büyük bir olay !! Oradan bir DSN kurmak ve MS Access 32 bit'e başarıyla bağlanmasını sağlamak imkansızdır. Korkunç hatayı alacaksınız:

    "belirtilen dsn bir mimari uyuşmazlığı 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öneticisine bir yürüyüş yapmasını söylemelisiniz ve bunun yerine Başlat, Komut isteminde yürütülen bu komutla 32 bit ODBC Yöneticisini açıkça çağırmalısınız:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Masaüstümde buna bir kısayol oluşturdum. Buradan, bu yönetici ile DSN'nizi oluşturun. Önemli nokta: KULLANICI DSNS DEĞİL, SİSTEM DSNS OLARAK OLUŞTURUN! Bu beni bir süre rahatsız etti.

    Bu arada, ODBC Yöneticisinin 64 bit sürümü şu şekilde de çalıştırılabilir:

    c: \ windows \ system32 \ odbcad32.exe

  6. MySql'den 32-bit ODBC Sürücüsünü yükledikten sonra, ODBC Yöneticisi'nde Ekle'ye tıkladığınızda 2 sürücünün listelendiğini göreceksiniz. "MySQL ODBC 5.2 ANSI Sürücüsü" nü seçin. UNICODE sürücüsünü denemedim.


Bu yapar. DSN'lerinizi 32 bit ODBC yöneticisinde tanımladıktan sonra, MySQL'e her zamanki gibi Access - External Data, ODBC Database, Link to the Database, Select Machine Data Source ve MySQL için oluşturduğunuz DSN'den bağlanabilirsiniz. veritabanı orada olacak.


2
Sanırım iki ODBC Yöneticisi için yolları değiştirdiniz32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns

3
@Jrgns Hayır, değiştirilmemişler. sysWOW64aslında 32 bit dizindir. Windows kafa karıştırıcı olmayı sever. ODBC Veri Kaynağı Yöneticisinin başlık çubuğunda (32-bit) veya (64-bit) göstereceği için hangi sürümü kullandığınızı bileceksiniz.
Tim Leaf

8

Mimari uyumsuzluk var. JDBC Sürücünüz ve JDK'nız aynı mimaride olmalıdır. 32bit Sürücü kullanıyorsanız ve JDK'nız 64 bit ise, bu hatayı alırsınız.

Görmek Bunu

Düzeltme: Mimarinize bağlıdır.

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


onu indirdim ve talimatlarda belirtildiği gibi yeni bağlantı dizesini denedim ama yine de çalışmadı. Belki yanlış bir şey yapıyorum?
user1028408

2

Bu cevabı gördüm ve benim için işe yaradı. 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ü kurduktan sonra, bunun için bir veya daha fazla veri kaynağı tanımlayabilirsiniz. Veri kaynağı adı (DSN), verilerin benzersiz bir açıklaması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 Bakılacak yere girilir. System_CAPS_noteNote

64 bit platform altında 32 bit sürücüye bağlanan bir veri kaynağını yönetmek için c: \ windows \ sysWOW64 \ odbcad32.exe kullanın. 64 bit sürücüye bağlanan bir veri kaynağını yönetmek için c: \ windows \ system32 \ odbcad32.exe kullanın. 64 bit Windows 8 işletim sistemindeki 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'yi kullanırsanız, örneğin, Sürücü Microsoft Access (* .mdb), aşağıdaki hata iletisini alırsınız:

Belirtilen DSN, Sürücü ve Uygulama arasında bir mimari uyuşmazlığı içeriyor

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

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


Merhaba Bineesh Kumar, kısaca açıklayabilir misiniz
Raj Kumar

2

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


2

Bu sorunu çözmek için öncelikle java yazılımınızın 32 bit sürüm olması gerektiğinden emin olun, eğer 64 bit sürümü ise, uyumsuzluk hatasını açıkça gösterecektir, bu nedenle 32 bit java sürümünü yeniden kurmayı deneyin ve java programını c: \ komutuyla çalıştırın. windows \ sysWOW64 \ odbcad32.exe (çalıştırma iletişim kutusuna kopyalayıp yapıştırmak en kolay) bu, programınızın kesinlikle çalışması için yeterli


1

Karşılaştığınız sorunun nedeni şunlar olabilir: Office 32 bit ve Komut İstemi 64 bit kullanıyordunuz. Sorunu çözmek için 2 adımı izlemeniz gerekir:

  1. Şunu kullanarak 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öneticisini açacak ve tüm veritabanı sürücülerini göreceksiniz.

  2. Bundan sonra, aşağıdaki komutu 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

Biraz geç, ama ben de aynı problemle karşılaştığım için, senaryonuza göre çözümümü ekleyeceğimi düşündüm.

Windows 7 (64 bit) ve Office 2010 (32 bit) kullanıyorum. DSN'siz bağlantı dizesini denedim:

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

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

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


Bunu Mob'un cevabından ima ettim ama onayladığınız için teşekkürler. Ne dağınıklık!
Kevin Bowersox

0

DSN'yi ilk olarak Denetim Masası> Yönetim Araçları> ODBC> Sistem DSN'sinde mi oluşturdunuz? "MyDatabase" ile aynı şekilde adlandırın ve eğer veritabanı / erişim dosyasını bulmak istiyorsam, gözat seçeneğini kullanarak yolu belirtin. Ur DSN başarıyla oluşturulduğunda, DB’ye kolayca erişebileceksiniz.


DSN'mi C: \ Windows \ SysWOW64'te bulduğum ODBC ile oluşturdum ... Kontrol panelindekinin hemen hemen hiç sürücüsü yoktu.
user1028408

daha sonra sürücüleri yüklemelisiniz çü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ılarını yüklemeyi denedim ama işe yaramadı.
user1028408


Bunları indirdim ve bağlantı dizesini değiştirdim: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," yönetici "," "); ama yine de başıma bela oluyor. Belki kodda başka bir şeyi değiştirmem gerekiyor?
user1028408

0

Netbeans kullanıyorsanız, tools-> java Platformuna gidin, c: / programfiles / java / jdk1_7'yi c: programFiles (x86) / java / jdk1_6_21'e işaret eden jdk_home'u değiştirin.

düzenlenebilir değilse netbeans.cnf dosyasını bulun ve jdk_home için yukarıda belirtildiği gibi değişiklik yapın. neatbeans'i yeniden başlat ve nasıl çalıştığını aynı sorunu yaşadım ama çalıştım.


0

64 bitlik bir dizüstü bilgisayardan, Windows 7 çalıştıran, MS Access 2010 kullanarak MySQL'e bağlanırken büyük sorun yaşadım. Önceki makaleyi çok yararlı buldum, ancak yine de odbc 3.5.1 kullanarak bağlanamadım. Daha önce Connector / ODBC 5.1.13 kullanarak 32 bitlik bir makineyi bağladığım için, bu sürümü indirdim ve yukarıdaki talimatları kullanarak kurdum. Başarı. Yanıt, Connector.odbc'nin farklı sürümlerini denemek gibi görünüyor.


0

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


0

Bazı eski CLASP uygulamaları ile bir Windows 7 sunucusuna yükseltme yaparken bu sorunla karşılaştım. 64 bitlik bir makinede 32 bit uygulama çalıştırmaya çalışıyorum.

Uygulama havuzlarını 32 bit uyumluluğunu True olarak ayarlamayı ve / veya 32 ve 64 bit dsn'leri oluşturmayı deneyin.

Her iki sürümde de odbc veri kaynağı penceresini çalıştır kutusundan açın. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Bu problemle karşılaştım. Bunun nedeni, bilgisayar mimariniz ve kullandığınız veritabanı mimarisidir.

32 bit işletim sistemi kullanıyorsanız, her şey iyi çalışır çünkü yalnızca 32 bit yazılım yükleyebilirsiniz. 64 bit işletim sistemini kullanırken sorun ortaya çıkıyor.

Bu sorunu çözmek basittir - bu sorunu keşfetmem uzun zaman aldı.

  1. İşletim Sisteminizin 64 bit olduğunu ancak Microsoft Office'inizin 32 bit olduğunu bilmek.
  2. Dolayısıyla, veritabanınıza NetBean IDE kullanarak erişebilmeniz için (bunu kullandığınızı varsayarak), 32 bitlik JDK yüklemeniz gerekir. 64 bit yüklediyseniz, onu kaldırmanız ve 32 biti yüklemeniz gerekir.

64 bit JVM'niz 32 bit JVM ile aynı olmadığı için veritabanınıza erişemezsiniz.

Veritabanınızı sisteminize eklemek için 1. Kontrol Paneli 2. Yönetici Araçları 3. Veri Kaynağı (ODBC) üzerine sağ tıklayın hedefi \ sysWOW64 \ odbcad32.exe olarak değiştirin başlangıcı r% \ SysWOW64 olarak değiştirin

O zaman koşabilmelisin. Bununla ilgili herhangi bir sorunun varsa bana haber ver.

Teşekkür ederim!


0

Hatayı düzelttim.

Adımları takip et:

  1. 32bt sürümünün JDK'sını yükleyin
  2. MS-Office 2007'yi yükleyin
  3. Kontrol Panelini Yapılandırın: a. Kontrol Paneli b. Yönetici Araçları c. Veri Kaynağı (ODBC)

    üzerine sağ tıklayın \sysWOW64\odbcad32.exe, başlangıcı değiştirmek için hedefi değiştirinr%\SysWOW64

Uygulayın ve En İyi Şanslar. Windows 7 ve 8'de çalışır

MS-Office'in daha yeni sürümünü kaldırın ve sorun devam ederse yalnızca MS-Office 2007'yi yükleyin


0

Bu sorunu çözmek için öncelikle java yazılımınızın 32 bit sürüm olması gerektiğinden emin olun, eğer 64 bit sürümse, uyumsuzluk hatasını açıkça gösterecektir, bu nedenle 32 bit java sürümünü yeniden yüklemeyi deneyin ve java programını c:\windows\sysWOW64\odbcad32.exe(en kolay çalıştırma iletişim kutusuna kopyalayıp yapıştırın) bu yeterli programınız kesinlikle çalışır


0

Bunun da daha faydalı olacağını düşünüyorum.

mimari özledim maçı için,

jdk dosyasını 32 bit C: \ Program Files (x86) \ Java \ jdk1.7.0_71 dosyasından kopyalayıp 64 bit C: \ Program Files \ Java \ jdk1.7.0_10 dosyasına yapıştırıyorum, sonra IDE hatasını (netbeans) önlemek için, değiştirdiğiniz dosyayla eşleşecek şekilde dosyayı yeniden adlandırın

o zaman gitmen iyi olur.

not: 64 bit dosyalarınızı paketlemelisiniz, böylece 64 bit uygulama oluşturmak istediğinizde yerine geri döndürebilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.