1. Pertama jelaskan apa itu JDBC
Sebelum saya melihat kata benda ini pada pandangan pertama, saya merasa perlu untuk mengetahui apa nama bahasa Inggris penuhnya. Konektivitas database Java, yang secara harfiah diterjemahkan ke dalam database Java yang dapat dihubungkan. Terus terang, saya ingin menyediakan satu set tautan perantara untuk menghubungkan kode dan database Java sehingga dapat mengontrol database secara langsung dengan mengoperasikan kode Java.
2. Esensi JDBC
Ini adalah solusi Java untuk mengakses database. Ia berharap dapat mengakses database yang berbeda dengan cara yang sama untuk mencapai antarmuka operasi Java yang tidak terkait dengan database tertentu.
JDBC pada dasarnya adalah satu set antarmuka standar. Produsen basis data yang berbeda mengimplementasikan antarmuka ini sesuai dengan karakteristik basis data mereka sendiri, dan kami tidak perlu peduli dengan metode implementasi tertentu.
Antarmuka utama yang diimplementasikan oleh produsen basis data di JDBC adalah sebagai berikut:
DriverManager: Manajemen Pengemudi
Koneksi,
Databasemetadata: Sambungkan ke antarmuka
Penyataan,
Persiapan
Callablestatement: Antarmuka objek pernyataan
Hasil,
HRESSETMETADATA: Antarmuka hasil
3. Bagaimana JDBC bekerja
Programmer memanggil bagian yang diterapkan oleh produsen database yang mendasarinya.
Yaitu: 1) Menerapkan langkah pertama koneksi melalui antarmuka koneksi
2) Transfer pernyataan SQL melalui hasil pernyataan
3) Proses utama menghemat hasil pengembalian database ke Hasil Hasil Set Antarmuka dapat diringkas sebagai:
1) Muat driver dan buat koneksi
2) Buat objek pernyataan
3) Jalankan pernyataan SQL
4) Kirim Kembali Set Hasil
5) Tutup koneksi
Di bawah ini saya akan mengambil database Oracle yang saya pelajari dan bekerja sama dengan Eclips sebagai contoh untuk menjelaskan cara mengimplementasikan JDBC
1) Memuat driver
Metode yang digunakan adalah: class.forname ("driver");
Apa yang saya ketahui tentang cara mendapatkan driver ini adalah: Perluas paket jar jdbc, jika saya menggunakan ojdbc6.jar, temukan oracle.jdbc.driver, temukan oracledriver, lalu klik kanan qualitycopy, dan tempel dalam kutipan, seperti: class.forname ("oracle.jdbc.driver.orrivercled");
2) Buat koneksi
Metode yang digunakan adalah: conn = driverManager.getConnection ("jdbc: oracle: tipis: @IP alamat: 1521: orcl", "akun basis data", "kata sandi basis data");
Misalnya: conn = driverManager.getConnection ("jdbc: oracle: tipis:@172.16.3.8: 1521: orcl", "jsd1601", "jsd1601");
3) Buat objek pernyataan
Metode yang digunakan adalah: pernyataan stmt = conn.createStatement ();
Perlu dicatat bahwa koneksi yang dibuat pada langkah kedua digunakan untuk memanggil metode tersebut
Hubungi metode ExecuteUpdate dan berikan pernyataan SQL ke dalamnya untuk menjalankan pernyataan SQL tertulis. Perlu dicatat di sini bahwa jenis SQL yang dapat dieksekusi oleh metode ExecuteUpdate adalah Insert, Update, Delete
Misalnya: pernyataan stmt = conn.createStatement ();
String sql = "masukkan ke dalam nilai emp_jiawenzhe (empno, ename, sal, deptno) (1000, 'jia wenzhe', 1500,10)";
int i = stmt.executeUpdate (sql);
Nilai pengembalian saya di sini adalah jumlah baris yang terpengaruh. Kita dapat menilai apakah operasi itu berhasil berdasarkan jumlah baris yang terpengaruh.
4) Hasil yang dikembalikan terutama mengacu pada operasi seleksi (tidak disebutkan di sini)
5) Akhirnya tutup koneksi
Misalnya: conn.close ();
Daftar seluruh kode, termasuk komentar:
Paket jdbc_day01; import java.sql.*;/*** tunjukkan langkah -langkah operasi jdbc* 1. Muat driver* 2. Buat koneksi* 3. Buat objek pernyataan* 4. Kirim pernyataan SQL* 5. Jika pengiriman statonik, proses hasil hasil* 6. Tutup koneksi* @author Jiawenzhe** publicaes* class public. 6. main (string [] args) melempar sqlexception {// persyaratan: buat karyawan, nomor karyawan, nama karyawan, gaji, nomor departemen // 1, koneksi conn = null; coba {class.forname ("oracle.jdbc.driver.oracledriver"); System.out.println ("Driver Loading berhasil"); // 2. Conn = driverManager.getConnection ("JDBC: Oracle: Thin:@172.16.3.8: 1521: orcl", "jsd1601", "jsd1601"); System.out.println (conn.getClass (). GetName ()); // 3. // Objek Pernyataan Statmen. Kirim dan jalankan pernyataan SQL/ * * int extrablate (String SQL); * Kirim Sisipkan, Perbarui, Hapus Pernyataan* Nilai Pengembalian Int mewakili jumlah baris yang mempengaruhi tabel basis data*/ pernyataan stmt = conn.createStateMent (); String sql = "masukkan ke emp_jiawenzhe (empno, ename, sal, deptno)" + "nilai (1000, 'wang xiaoer', 1500,10)"; int i = stmt.executeUpdate (sql); if (i> 0) {System.out.println ("Simpan dengan sukses!"); }} catch (classNotFoundException e) {e.printstacktrace (); // 1. Catat log // 2. Beri tahu penelepon untuk melempar runimeException baru ("Load Driver Error", e); } akhirnya {// tutup koneksi if (conn! = null) {coba {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }}}}}}} Catatan: Paket JAR yang dapat digunakan dalam database Oracle: ojdbc14.jar/ojdbc6.jar (oracle12c menggunakan ini)
Paket JAR yang dapat digunakan oleh MySQL Database: MySQL-Connector-Java-5.0.4-Bin.jar
Memuat Kelas Driver:
Class.forname ("com.mysql.jdbc.driver"); 1. Pengenalan metode pengemasan
Yang paling menyentuh saya adalah bahwa ketika saya menulis serangkaian kode tertentu, jika ada kode kembali, saya pasti akan memilih metode untuk merangkum kode sampai batas tertentu, dari merangkum metode untuk merangkum kelas. Penggunaan JDBC yang disebutkan sebelumnya untuk operasi basis data (penambahan, penghapusan, dan modifikasi, karena kueri melibatkan pengoperasian yang ditetapkan, dan dinyatakan secara terpisah) dibagi menjadi empat proses:
1) Memuat driver
2) Buat koneksi
3) Buat objek pernyataan dan kirim SQL
4) Tutup koneksi
Dengan kata lain, ketika kami melakukan operasi basis data apa pun, kami harus melakukan langkah -langkah di atas, yang mengarah ke redundansi kode. Jadi kami mengusulkan untuk merangkum langkah -langkah umum ini ke dalam kelas sehingga dapat menjadi kelas alat untuk penggunaan saya.
2. Tiga versi enkapsulasi
Versi 1
Ketika saya belajar, saya secara bertahap merangkum kelas -kelas ini secara bertahap dan meningkatkannya secara bertahap, karena jika versi akhir dari enkapsulasi diusulkan secara langsung, sulit bagi pemula untuk diterima. Saya akan menjelaskan yang pertama, yaitu metode enkapsulasi paling sederhana:
Anda akan mengetahui sebelumnya bahwa tidak peduli bagaimana Anda ingin mengoperasikan database, memuat driver sangat penting, dan driver pemuatan terutama termasuk deklarasi, nama driver, alamat IP, nomor port, nama akun basis data, kata sandi, dll., Dan esensi dari ini adalah string, jadi saya mendefinisikan string ini secara terpisah, seperti yang ditunjukkan di bawah ini: dan esensi dari ini adalah string, jadi saya mendefinisikan string ini secara terpisah, seperti yang ditunjukkan di bawah ini:
Private Static String DriverClass = "oracle.jdbc.driver.oracledRiver"; private static string url = "jdbc: oracle: tipis: losthost: 1521: orcl"; private static string user = "System"; kata sandi string statis pribadi = "123";
Dengan cara ini, saat membuat koneksi, saya bisa secara langsung mendapatkan nama variabel untuk mengganti string panjang. Saat memuat driver, Metode Class.Forname dinyatakan dalam blok statis karena saat memuat data, driver dimuat.
Seperti yang ditunjukkan di bawah ini:
static {try {class.forname (driverclass); } catch (ClassNotFoundException e) {E.PrintStackTrace (); Lempar RuntimeException baru ("Load Driver Error", E); }}Untuk membuat koneksi, kami memanggil metode GetConnection dari DriverManager dan memasukkan nama pengguna dan kata sandi yang sesuai ke dalamnya. Kami memasukkan metode ini langsung ke metode yang saya definisikan, dan kemudian secara langsung memanggil metode saya untuk membuat koneksi. Perlu dicatat bahwa nilai pengembalian metode adalah objek koneksi, yang mudah dipahami, karena kami ingin mendapatkan objek tipe koneksi ini, seperti yang ditunjukkan di bawah ini:
Public Static Connection getConnection () melempar sqlexception {connection conn = driverManager.getConnection (url, pengguna, kata sandi); return conn; }Kemudian buat objek pernyataan dan kirim SQL. Tentu saja, SQL adalah satu -satunya tempat khusus di sini, karena apa yang perlu dilakukan SQL sangat berbeda, jadi langkah ini tidak perlu dienkapsulasi.
Akhirnya, tutup koneksi, yang disebut metode tutup (), seperti yang ditunjukkan di bawah ini
public static void tutup (koneksi conn) {if (conn! = null) {coba {conn.close (); } catch (sqlexception e) {e.printstacktrace (); Lempar RuntimeException baru ("Tutup Koneksi Kesalahan", E); }}}}Versi pertama keseluruhan paket adalah sebagai berikut:
Paket jbbc_day01; import java.sql.connection; impor java.sql.driverManager; import java.sql.sqlexception;/** * digunakan untuk mengelola koneksi * @author jiawenzhe * */public class dbutil {private static string driverclass = "orawenzhe * {private static string driver." orawenzhe * public dbutil {private static string driverclass = "orwenzhe * {private static driverclass =" orAwenze.pacle. private static string url = "jdbc: oracle: tipis: losthost: 1521: orcl"; private static string user = "System"; kata sandi string statis pribadi = "123"; // 1. Loading Driver Static {coba {class.forname (driverclass); } catch (ClassNotFoundException e) {E.PrintStackTrace (); Lempar RuntimeException baru ("Loading Driver Error", E); }}} // 2. Buat koneksi/** Cara mendefinisikan metode yang dapat membuat koneksi* Tipe Nilai Pengembalian: Apakah ada hasil operasi, jika ada, jenis hasilnya adalah jenis nilai pengembalian* Daftar parameter:* Apakah ada data yang tidak pasti dalam fungsi metode yang berpartisipasi dalam operasi, jika ada, Parameter = Public Static GetConnection () lemparan sqlexception {connection {connection. return conn; } // 3. Tutup koneksi public static void tutup (koneksi conn) {if (conn! = Null) {coba {conn.close (); } catch (sqlexception e) {e.printstacktrace (); Lempar RuntimeException baru ("Tutup Koneksi Kesalahan", E); }}}}}Cukup merangkum dengan cara ini, dan kemudian hubungi kelas enkapsulasi secara langsung saat melakukan operasi SQL. Yang perlu Anda tulis adalah membuat objek pernyataan Anda dan mengirim pernyataan SQL Anda
Versi 2
Faktanya, versi 2 sangat mirip dengan versi 1, untuk menebus salah satu kekurangan versi 1, yaitu, ketika Anda mengubah database, kata sandi akun dari berbagai database berbeda, jadi Anda perlu memodifikasi kata sandi akun dan alamat IP. Saya sebelumnya telah merangkum ini di kelas alat dalam bentuk string, yang berarti bahwa kita harus memodifikasi kelas alat setiap kali kita mengubah database, yang sangat tidak pantas. Jadi kami mengusulkan metode peningkatan untuk memasukkan data koneksi ini ke dalam file konfigurasi, dan kelas alat membaca file konfigurasi ini. Kami dapat secara langsung memodifikasi file konfigurasi saat memodifikasinya.
Sebelum memperkenalkan versi ini, saya memperkenalkan kelas baru, Properties, yang merupakan file yang dapat membaca dan membaca konten file konfigurasi dalam bentuk aliran dan kemudian mengembalikannya ke kelas alat.
Pertama, saya akan memberikan contoh file konfigurasi. Bahkan, itu tidak perlu dijelaskan. Jelas sekilas, seperti yang ditunjukkan di bawah ini:
jdbc.driverclass = oracle.jdbc.driver.oracledriverjdbc.url = jdbc: oracle: tipis: localhost: orcljdbc.user = systemjdbc.password = 123
Bagian depan adalah kuncinya, berikut ini adalah nilai, dan nilai kunci sebelumnya didefinisikan oleh diri kita sendiri, seperti halnya mendefinisikan nama variabel, nilai selanjutnya adalah situasi aktual dari database kami. Apa yang perlu kita beri perhatian khusus di sini adalah bahwa nama akhiran dari file konfigurasi ini harus diakhiri dengan .Properti, karena dengan cara ini, kelas properti dapat dibaca.
Contoh bagian ini adalah sebagai berikut:
static {try {// muat properti file properti properti pop = properti baru (); pop url = pop.getProperty ("jdbc.url"); driverclass = pop.getProperty ("jdbc.driverclass"); user = pop.getProperty ("jdbc.user"); kata sandi = pop.getProperty ("jdbc.password"); Class.forname (driverclass); } catch (ClassNotFoundException e) {E.PrintStackTrace (); Lempar RuntimeException baru ("Load Driver Error", E); } catch (ioException e) {// TODO AUTO-ENCEALATED Catch Block E.PrintStackTrace (); }}Metode pemuatan () adalah membacanya atau dapat dianggap memuat file konfigurasi. Ingatlah seluruh kalimat ini tanpa mempelajari maknanya. GetProperty () memperoleh nilai yang sesuai melalui kunci, yang sangat mirip dengan bentuk mendapatkan nilai untuk set pasangan nilai kunci.
Kode keseluruhan adalah sebagai berikut:
Paket jbbc_day01; impor java.io.fileInputStream; impor java.io.ioException; impor java.io.inputstream; Impor java.sql.connection; impor java.sql.driverManager; impor java.sql.sqlexception; impor java. informasi, disimpan dalam file properti * @author jiawenzhe * */kelas publik dbutil2 {private static string driverclass; URL string statis pribadi; Pengguna String Statis Pribadi; kata sandi string statis pribadi; // 1. Load Driver Static {coba {// Muat properti file properti properti pop = properti baru (); pop url = pop.getProperty ("jdbc.url"); driverclass = pop.getProperty ("jdbc.driverclass"); user = pop.getProperty ("jdbc.user"); kata sandi = pop.getProperty ("jdbc.password"); Class.forname (driverclass); } catch (ClassNotFoundException e) {E.PrintStackTrace (); Lempar RuntimeException baru ("Load Driver Error", E); } catch (ioException e) {// TODO AUTO-ENCEALATED Catch Block E.PrintStackTrace (); }} // 2. Buat koneksi/** Cara mendefinisikan metode yang dapat membuat koneksi* Tipe Nilai Pengembalian: Apakah ada hasil operasi, jika ada, jenis hasilnya adalah jenis nilai pengembalian* Daftar parameter:* Apakah ada data yang tidak pasti dalam fungsi metode yang berpartisipasi dalam operasi, jika ada, Parameter = Public Static GetConnection () Lemparan SQlexception {Parameter = PublicMan. return conn; } // 3. Tutup koneksi public static void tutup (koneksi conn) {if (conn! = Null) {coba {conn.close (); } catch (sqlexception e) {e.printstacktrace (); Lempar RuntimeException baru ("Tutup Koneksi Kesalahan", E); }}}}}