2015-01-29 30 views
6

Ben SO bu konuda burada okudum java 6 beri artık kullanarak JDBC sürücüsü kaydetmeniz gerekir:Class.forName (JDBC_DRIVER) artık gerekli değil mi?

Class.forName(JDBC_DRIVER); 

DriverManager "jdbc.drivers" almak için sistem özelliğinde bulunan yolu kullanması nedeniyle doğru sürücü.

Ama followng yaptığımda:

System.out.print(System.getProperty("jdbc.drivers")); 

null baskılı alır.

Uygulamamın neden düzgün çalıştığı konusunda herhangi bir ipucunuz var mı? ;)

+2

Tüm belgelerinde anlatılmış: http://docs.oracle.com/javase/7/docs/api/java/sql/ Örneğin, META-INF/services/java.sql.Driver dosya girdisini içerecektir, my.sql.Driver class yük DriverManager.html –

cevap

9

Bu sistem özelliğiyle hiçbir ilgisi yoktur. Java6 (ve JDBC4), "service provider" olarak bilinen bir kavram tanıttı. Burada, başlangıç ​​sırasında JVM tarafından bilinen arabirim uygulamaları algılanabilir. Bununla uyumlu bir sürücü, DriverManager tarafından otomatik olarak kaydedilecektir. Bu yüzden Class.forName() artık gerekli değil - ancak sürücü bunu destekliyorsa.

Servis kaydı, sürücünün META-INF dizini içindeki jar dosyasında services dizini varsa başlatılır. Bu dizinin, uygulama sınıfını içeren java.sql.Driver olan bir JDBC sürücüsü durumunda uygulanan arabirimin adıyla bir metin dosyası içermesi gerekir. DriverManager ait Javadocs itibaren

+1

Bu, tüm yapmam gereken, JDBC jar uygulamamı belirtmek anlamına geliyor, değil mi? Daha fazla JDBC uygulamasını belirtirsem ne olur? – GionJh

+2

@ user986437 Evet, sınıf yolunda bir JDBC 4 sürücüsü eklemek yeterlidir. Birden fazla sürücü denemedim, ancak doğru olanı verilen URL'ye bağlı olarak seçileceğini tahmin ediyorum (her sürücü farklı bir URL'yi destekliyor). – Puce

+1

Bu mekaniği tanıtan JDBC 4 değil JDBC 4; http://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html#package.description – Puce

2

:

onun başlatma parçası olarak, DriverManager sınıf "jdbc.drivers" Sistem özelliğinde başvurulan sürücü sınıflarını yüklemeye çalışacaktır. Bu, bir kullanıcının uygulamaları tarafından kullanılan JDBC Sürücülerini özelleştirmesine izin verir. sizin ~/.hotjava/özelliklerinde Örneğin belirtilebilir dosyası:

jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver 

Bu sistem özelliği belirtilmelidir anlamına gelir. Sürücü kaydedildiğinde sınıfın bu özelliği otomatik olarak dolduracağını söylemez.

Uygulamanızın neden işe yaradığı ile ilgili olarak, DriverManager#registerDriver() yöntemini çağırıyorsanız (bu çoğu sürücü için gerekli olmasa da) kontrol etmek isteyebilirsiniz. Evet ise, sürücü kayıtlı. getConnection ve getDrivers Java Standard Edition Servis Sağlayıcı mekanizmasını desteklemek için geliştirilmiştir

DriverManager yöntemleri: Aksi takdirde, uygulama belirtildiği gibi, bir servis sağlayıcı dosya olabilir. JDBC 4.0 Sürücüleri, META-INF/services/java.sql.Driver dosyasını içermelidir. Bu dosya java.sql.Driver'ın JDBC sürücülerinin uygulanmasını içerir.

+0

'registerDriver' yöntemini kendiniz aramamalısınız, yüklendiğinde JDBC sürücüsü uygulamasının kendisi tarafından çağrılması amaçlanır. Tek gerçek istisnası, kendisini kaydetmeyen bir sürücü kullanırsanız (ve hemen hemen tüm JDBC sürücüleri yüklendiklerinde kendilerini kaydedebilirler, belki de özel amaçlı (ana akım değil) sürücüler hariç). –

İlgili konular