2011-04-21 29 views
12

Uygulamamı oluşturdum ve bunu bir erişim DB dosyasına/kullanıcıdan okuyan/okuyan pencereler altında test ettim.Linux'dan erişim veritabanına bağlanma

Ama gerçek dünyada linux ortamında koşulacak ve şu anda büyük bir sorunum var, linux'un ms acess db'ye erişmesi için herhangi bir sürücü yok gibi görünüyor, şimdi bağlantıyı şu şekilde yapıyorum:

private static Connection getConnection() { 
     if (connection == null) { 
      try { 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
       String conStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + configuration.getAccessDbFile(); 
       connection = DriverManager.getConnection(conStr); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return connection; 
    } 

kimse, kimsenin ne yapabilirim bir öneri var mı buna benzer bir şey karşılaştı?

java.lang.NullPointerException 
     at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436) 
     at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:207) 

cevap

7

aşağıdaki gibi getConnection çağırmalıdır düşünüyorlar. ODBC bir windows teknolojisidir. Linux için bazı seçenekler var, ancak bu yaygın bir senaryo değil.

Keşfettiğiniz gibi, linux makinenizde Access ODBC sürücüleri yoktur, bu nedenle JDBC-ODBC köprüsü başarısız olur. Uygun bir ODBC sürücüsü kurabilirsiniz, ancak ücretsiz ya da açık kaynak kodları bilmiyorum. linux için defacto ODBC seçeneğidir:

unixODBC dayalı Erişimi için bir ticari sürücü:

A tipi 4 JDBC sürücüsü olduğu can sözde Access veritabanlarına bağlanın:

bunlardan herhangi biriyle kişisel bir deneyim yoktur. Tip 4 JDBC sürücüsü ideal olurdu, ancak ilan edildiği kadar mükemmel çalıştığından şüphelenirim.

(Eminim nedenleriniz var, ama Linux makinelerine dağıtım yapmayı planlıyorsanız bir Access veritabanını neden kullandığınızı merak etmeliyim. Bir Java uygulamasının Access veritabanını kullanmasının tek iyi sebebi inanıyorum. eğer Java uygulamasının ötesinde amaçlarla kullanılan özel bir programlama ile mevcut bir Access uygulamasıysa, aksi takdirde, bir dizi daha iyi seçenek vardır.Ayrıca Access'i kullanmanın ana sebebi sadece Access'i kullanıcı dostu bir GUI olarak kullanabiliyorsanız form & raporları için araç, daha az kısıtlayıcı bir veritabanında (Derby, SQLLite, MySQL, PostgreSQL, MS SQL Server, vb) veri saklayabilir ve daha sonra Access'ten veritabanına ODBC ile bağlanabilirsiniz.) Bu sizin dağıtmanızı sağlar. Linux üzerinde Java uygulaması, veritabanınız nerede olursa olsun en mantıklı ve hala bağlanmak için Access'i kullanın pencerelerden veritabanına.Bunu birkaç kez yaptım.)

+3

çoğu geliştirici olacaktır yapacağını böyle bir durumda ne olacağını ilk adım bu yürütme ediyorum Access veritabanını dışa aktarın ve MySQL gibi makul bir şeye aktarabilirsiniz. Access'in "gerçek" bir şey için neden kullanılmaması gerektiğine dair çeşitli görüşler için http://databases.aspfaq.com/database/what-are-the-limitations-of-ms-access.html adresine bakın. – wallyk

+2

@wallyk: "Gerçek" ile ne demek istiyorsun? Linux uygulamaları? Eğer öyleyse, buna katılıyorum. Web uygulamaları? Eğer öyleyse, evet, buna katılıyorum. Ancak, Access/Jet/ACE'nin mükemmel bir araç/veri deposu olduğu çok fazla uygulama alanı var - bu tıpkı başka bir şey gibi "gerçek". Kısacası, anti-Access bağnazlığı kaybedersiniz. –

+2

@ David-W-Fenton: Bağımlılık değil — Microsoft teknolojilerinde bulunan uygulamaların kaydedilmesiyle ilgili onlarca yıllık geliştirme ve bakım deneyimim var. "Gerçek" ile, benim deneyimime, diğer danışmanlara ve endüstri yorumcısına göre Access'in 3 veya 4'ten daha fazla olduğu eşzamanlı sayıda eşzamanlı kullanıcı kastediyorum. Bağımsız uygulamalar için Access tamam olma eğilimindedir. Ancak, bir avuç dolusu kullanıcı * veya * otomatik veri girişi ile herhangi bir duruma getirilirse, Access'in eşzamanlılık ve ölçeklenebilirlik sınırlamaları, hızlı bir şekilde tasarıma yetişir. – wallyk

0

Git böylece bağlantı aracılığıyla bu size yardımcı olacaktır:

Bu

ben linux olsun istisnadır.

http://www.neowin.net/forum/topic/887410-java-ms-access-driver-for-maclinux/

ve hata ayıklama ve bize bağlantı almak için geçiyoruz bağlantı dizesi nedir bildirebilirsiniz. Sana Bir MS Access veritabanı erişim veya ODBC kullanmayı Linux üzerinde çalışan bir uygulama için nadir bulunuyor

DriverManager.getConnection(conStr, "", ""); 
+0

, ben çalıştırılabilir kavanoz – London

4

Access'e takılı kalırsanız, ancak veritabanı dosyasıyla olan etkileşimleriniz oldukça basittir (örneğin karmaşık SQL sorguları yapmıyorsanız). Jackcess gibi bir şey. Bir Access veritabanını değiştirmenize izin veren bir saf java kitaplığıdır, ancak bir jdbc arabirimi sağlamamaktadır, bu yüzden de Jackcess API kullanarak kod yazmanız gerekir.

İlgili konular