Memuat Pemacu JDBC

Java Teratas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS

1. Pengenalan

JDBC adalah sekumpulan spesifikasi yang menentukan bahagian API dan SPI kontrak untuk Java Database Connectivity. Piawaian tersebut menentukan abstraksi pemacu JDBC sebagai titik masuk utama untuk berinteraksi dengan pangkalan data.

Dalam tutorial ini, kita akan melihat beberapa langkah asas yang diperlukan untuk memuatkan pemacu JDBC.

2. Pemacu JDBC

Untuk menyambung ke pangkalan data, kita mesti mendapatkan contoh pemacu JDBC.

Kita dapat memperolehnya melalui DriverManager dengan menentukan rentetan sambungan URL JDBC. URL semacam itu mengandungi jenis mesin pangkalan data, nama pangkalan data, nama host, dan port, serta parameter sambungan lain yang khusus untuk vendor pangkalan data.

Dengan menggunakan rentetan sambungan, kita dapat memperoleh objek sambungan pangkalan data, yang merupakan unit dasar komunikasi dengan pangkalan data di JDBC :

Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:21500/test?user=fred&password=secret&ssl=true"); 

Bagaimana pengurus pemandu tahu pemandu mana yang harus digunakan jika satu-satunya petunjuk adalah URL yang ditentukan?

Mungkin terdapat banyak pemandu JDBC di classpath, jadi mesti ada cara untuk membezakan setiap driver secara unik.

3. Pendekatan Warisan

Sebelum JDBC versi 4 dan Java SE 1.6, tidak ada mekanisme generik di JVM yang memungkinkan perkhidmatan dapat ditemui dan didaftarkan secara automatik. Oleh kerana itu, langkah manual diperlukan untuk memuatkan kelas pemacu JDBC dengan nama:

Class.forName("oracle.jdbc.driver.OracleDriver");

Proses memuat kelas mencetuskan rutin inisialisasi statik yang mendaftarkan contoh pemacu dengan DriverManager dan mengaitkan kelas ini dengan pengecam enjin pangkalan data, seperti oracle atau postgres .

Setelah pendaftaran selesai, kita dapat menggunakan pengecam ini di dalam JDBC URL sebagai jdbc: oracle .

Rutin pendaftaran pemandu biasa akan memberi contoh pemandu dan menyebarkannya ke kaedah DriverManager.registerDriver :

public static void register() throws SQLException { if (isRegistered()) { throw new IllegalStateException("Driver is already registered. It can only be registered once."); } else { Driver registeredDriver = new Driver(); DriverManager.registerDriver(registeredDriver); Driver.registeredDriver = registeredDriver; } }

Contoh di atas menunjukkan pendaftaran pemandu Postgres JDBC dengan DriverManager . Ia dipicu oleh JVM sebagai sebahagian dari pemula statik.

Anda mungkin mengautomasikan langkah ini secara separa walaupun dengan pendekatan warisan dengan menetapkan sifat sistem jdbc.drivers :

java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver

Apabila harta ini ditentukan, pengurus pemandu secara automatik akan berusaha memuatkan pemacu JDBC yang ditentukan.

4. Pendekatan JDBC 4

Masalah penemuan perkhidmatan automatik diselesaikan dengan Java 1.6 dan mekanisme penyedia perkhidmatan . Ini membolehkan penyedia perkhidmatan menyatakan perkhidmatan mereka dengan meletakkannya di bawah META-INF / perkhidmatan di dalam fail JAR yang mengandungi perkhidmatan tersebut.

Mekanisme ini mendaftarkan pemandu secara automatik sehingga langkah manual untuk memuat kelas tidak lagi diperlukan. Namun, walaupun dengan penyedia perkhidmatan di tempat, pemuatan kelas manual tidak akan menyebabkan kegagalan. Adalah sah untuk meminta pemacu pemuatan secara eksplisit dengan pemacu JVM dan JDBC 4 baru-baru ini.

Spesifikasi penyedia perkhidmatan hanya menggantikan pemuatan kelas manual dengan pendekatan deklaratif. Sebagai contoh, pemacu PostgreSQL JDBC mempunyai satu fail di bawah META-INF / services / . Nama fail adalah java.sql.Driver (yang merupakan konvensyen mapan untuk pemacu JDBC). Ia mengandungi nama kelas yang betul dari pemacu JDBC, yang, dalam kes ini, adalah org.postgresql.Driver .

5. Kesimpulan

Dalam artikel ini, kami telah mengkaji konsep asas di sekitar JDBC, serta pelbagai kaedah untuk memuat pemacu JDBC, dengan penjelasan mengenai setiap pendekatan.

Seperti biasa, kod sumber lengkap untuk artikel tersebut terdapat di GitHub.

Bahagian bawah Java

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS