Memuat Driver JDBC

Java Top

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

>> LIHAT KURSUSnya

1. Perkenalan

JDBC adalah sekumpulan spesifikasi yang mendefinisikan bagian API dan SPI dari kontrak untuk Konektivitas Database Java. Standar mendefinisikan abstraksi driver JDBC sebagai titik masuk utama untuk berinteraksi dengan database.

Dalam tutorial ini, kita akan melihat beberapa langkah dasar yang diperlukan untuk memuat driver JDBC.

2. Driver JDBC

Untuk terhubung ke database, kita harus mendapatkan instance dari driver JDBC.

Kita bisa mendapatkannya melalui DriverManager dengan menentukan string koneksi URL JDBC. URL tersebut berisi tipe mesin database, nama database, nama host, dan port, serta parameter koneksi lain yang khusus untuk vendor database.

Dengan menggunakan string koneksi, kita dapat memperoleh objek koneksi database, yang merupakan unit dasar komunikasi dengan database di JDBC :

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

Bagaimana manajer driver mengetahui driver mana yang akan digunakan jika satu-satunya indikasi adalah URL yang ditentukan?

Mungkin ada banyak driver JDBC di classpath, jadi harus ada cara untuk membedakan setiap driver secara unik.

3. Pendekatan Warisan

Sebelum JDBC versi 4 dan Java SE 1.6, tidak ada mekanisme umum di JVM yang memungkinkan layanan ditemukan dan didaftarkan secara otomatis. Karena itu, diperlukan langkah manual untuk memuat kelas driver JDBC dengan nama:

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

Proses pemuatan kelas memicu rutinitas inisialisasi statis yang mendaftarkan instance driver dengan DriverManager dan mengaitkan kelas ini dengan pengenal mesin database, seperti oracle atau postgres .

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

Rutinitas pendaftaran driver yang khas akan membuat instance driver dan meneruskannya ke metode 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 registrasi driver Postgres JDBC dengan DriverManager . Ini dipicu oleh JVM sebagai bagian dari penginisialisasi statis.

Dimungkinkan untuk mengotomatiskan sebagian langkah ini bahkan dengan pendekatan lama dengan menyetel properti sistem jdbc.drivers :

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

Ketika properti ini ditentukan, manajer driver akan secara otomatis mencoba untuk memuat driver JDBC yang ditentukan.

4. Pendekatan JDBC 4

Masalah penemuan layanan otomatis diselesaikan dengan Java 1.6 dan mekanisme penyedia layanan . Ini memungkinkan penyedia layanan untuk mendeklarasikan layanan mereka dengan menempatkan mereka di bawah META-INF / services di dalam file JAR yang berisi layanan.

Mekanisme ini mendaftarkan driver secara otomatis sehingga langkah manual untuk memuat kelas tidak lagi diperlukan. Namun, bahkan dengan penyedia layanan di tempat, pemuatan kelas manual tidak akan menyebabkan kegagalan. Sangat legal untuk meminta pemuatan driver secara eksplisit dengan driver JVM dan JDBC 4 terbaru.

Spesifikasi penyedia layanan hanya menggantikan pemuatan kelas manual dengan pendekatan deklaratif. Misalnya, driver JDBC PostgreSQL memiliki satu file di bawah META-INF / services / . Nama file adalah java.sql.Driver (yang merupakan konvensi mapan untuk driver JDBC). Ini berisi nama kelas yang memenuhi syarat dari driver JDBC, yang, dalam hal ini, adalah org.postgresql.Driver .

5. Kesimpulan

Pada artikel ini, kami telah meninjau konsep dasar seputar JDBC, serta berbagai metode untuk memuat driver JDBC, dengan penjelasan tentang setiap pendekatan.

Seperti biasa, kode sumber lengkap untuk artikel tersedia di GitHub.

Jawa bawah

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

>> LIHAT KURSUSnya