2011-01-09 15 views
10

Bir veritabanına bağlanmak için kullandığımda neden hem Class.forName("com.mysql.jdbc.Driver"); hem de Class.forName("com.mysql.jdbc.Driver").newInstance(); çalıştıklarını merak ediyordum. Yeni bir örnek oluşturulmadığından, ilk olarak çalışmaması gereken değil. Ve yine de, hala çalışıyor. Netbeans kullanıyorum 6.9.1. Girdiniz için teşekkürler!JDBC bağlantısı- Class.forName vs Class.forName(). NewInstance?

cevap

10

Class.forName("xxx") veritabanıyla bağlantı oluşturmuyor, sadece JDBC sürücüsünü yükler ve daha sonra bir DriverManager.getConnection(...) aramasının çalışmasını sağlayacak şekilde kaydeder. Sürücüyü taklit etmek gerekli değildir.

+0

Teşekkürler! Son bir qn-eğer bunu başlatırsanız, o zaman daha sonraki DriverManager.getConnection (..) tekrar tekrar oluşturmaz, düzeltmez? Bunu sadece ilk adımda gerçekleştirmediysen yapacak mı? – OckhamsRazor

+0

Sadece sınıfı yükleyerek, sürücü yöneticisinin, onu sürücüde statik bir blok tarafından tetiklenen haliyle başlattığından şüpheleniyorum. Dürüst olmak gerekirse, tamamen emin değilim. Sürücüyü kullanmak istediğinizde (örneğin etrafına sarmak için), bağlantı almak için DriverManager'ı kullanmaktan kaçının veya DriverManager statik yöntemlerini kullanarak kendi sürücü örneğinizi kaydetmeniz gerekir. – araqnid

1

Jdbc 4.0'ı destekleyen bir sürücüde Class.forName() öğesine bile gerek yoktur. Sürücü, DriverManager tarafından görüntülendiğinde, kendisini anında yüklemek için yerleşik bir mekanizmaya sahip olması gerekiyordu.

(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) Sürücü Standardı GetConnection yöntemleri ve getDrivers, Java Standard Edition Hizmet Sağlayıcısı mekanizmasını desteklemek için geliştirilmiştir. 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.

Uygulamalar artık ihtiyaç

my.sql.Driver explictly için: Örneğin, my.sql.Driver sınıfını yüklemek için, META-INF/hizmet/java.sql.Driver dosya girdisini içerecektir Class.forName() kullanarak JDBC sürücüleri yükleyin. Class.forName() kullanarak JDBC sürücülerini yükleyen mevcut programlar, değişiklik yapılmadan çalışmaya devam edecektir.

İlgili konular