2011-05-13 17 views
10

Ben JDBC sürücüsünü yüklemek için tercih yöntem olduğunu söyledi am:Yükleme JDBC sürücüsü

Class.forName(driverName); 

Bu belki bir XML yapılandırma dosyasında veya kullanıcı girişi okunan birden sürücüler arasında dinamik karar için daha iyi olduğunu anlamak . Merak ettiğim şey, bu ifadeyi çağırmak, belirtilen sürücüyü, sonuçta ortaya çıkan "Sınıf" nesnesini bile depolamadığımız ortama yükler. JavaDocs giriş diyor ki: Verilen dize adı Bu durumda

ile sınıf veya arayüzü ile ilişkili

public static Class forName(String className) 
       throws ClassNotFoundExceptionReturns 

döner Sınıf nesnesi, nasıl Java geliştiricileri varlığını kolaylaştırmak başardı do sürücü nesnesi sadece bu ifadeyle mi?

+2

Not. JDBC, sürücüleri şimdi otomatik olarak bulabilir ve başlatabilir. Bkz: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html – Jesper

+0

de diğer bilgiler http://stackoverflow.com/a/8053125/632951 – Pacerier

cevap

26

Class#forName(), static initializers'u (örneğin, static örneğine değil, sınıf için geçerlidir) çalıştırır. JDBC sürücüsü uygulaması should kendini statik başlatıcıya kaydeder. Bu tür yerine hatalı kurucu içinde kendini kaydeder org.gjt.mm.mysql.Driver olarak arabası JDBC sürücüleri var olduğunu

public class SomeDriver implements Driver { 

    static { 
     DriverManager.registerDriver(new SomeDriver()); 
    } 

} 

not edin. Bu nedenle, kendilerini kaydettirmek için bu tür sürücülere bir newInstance() aramasına ihtiyacınız var. Eğer (Java SE 6 dahil) JDBC 4.0 veya daha yeni kullanıyorsanız artık eğer `Class.forName (...)` gerekli olmadığını

+0

Anladım efendim. Teşekkürler. En iyi cevap tüm yol :) – mihsathe

+0

Rica ederim. – BalusC

+0

@BalusC, Neden statik başlatıcı çalıştırmak için Class.forName kullanmak gerekiyor? Eğer 'SomeDriver' doğrudan kullanırsak, ör. biz zaten bunun bir örneğini var, ya da biz ararsanız 'SomeDriver.StaticMethod' doğrudan, o zaten statik başlatıcı adı verilecek sağlanmalıdır ki? – Pacerier

İlgili konular