Tujuan tutorial ini adalah untuk menggunakan lapisan terpisah yang ditulis di Java untuk mengakses tabel dalam database. Lapisan ini biasanya disebut Lapisan Akses Data (DAL)
Manfaat terbesar dari menggunakan DAL adalah menyederhanakan operasi akses database dengan secara langsung menggunakan beberapa metode seperti insert () dan find (), daripada selalu melakukan tautan terlebih dahulu dan kemudian menjalankan beberapa pertanyaan.
Lapisan ini menangani semua panggilan dan permintaan yang berhubungan dengan database di dalamnya.
Buat database
Kami ingin membuat tabel sederhana untuk pengguna, kami dapat menggunakan bidang ini untuk membuat
id int
Nama Varchar (200)
kata sandi varchar (200)
usia int
Objek transfer data
Lapisan ini harus berisi kelas sederhana yang disebut Data Transfer Object (DTO). Kelas ini hanyalah peta sederhana yang sesuai dengan tabel dalam database, dan setiap kolom dalam tabel sesuai dengan variabel anggota kelas.
Tujuan kami adalah menggunakan objek Java sederhana, daripada memproses pernyataan SQL dan perintah terkait basis data lainnya untuk menambah, menghapus, memodifikasi, dan memeriksa database.
Jika kita ingin memetakan tabel ke dalam kode java, kita hanya perlu membuat kelas (kacang) yang berisi bidang yang sama.
Untuk merangkum dengan lebih baik, selain konstruktor, kita harus menyatakan semua variabel bidang sebagai pribadi, membuat aksesor (getters dan setter), salah satunya adalah konstruktor default.
Pengguna kelas publik {private integer ID; nama string pribadi; Pass string pribadi; usia bilangan bulat pribadi;}Untuk memetakan bidang dengan benar, kita harus mempertimbangkan nilai nol dalam database. Untuk nilai default asli Java, seperti tipe int, nilai defaultnya adalah 0, jadi kami harus menyediakan tipe data baru yang dapat mengakomodasi nilai nol. Kami dapat mengganti int dengan menggunakan jenis khusus - kelas enkapsulasi, seperti Integer.
Akhirnya kelas kita akan terlihat seperti ini:
Pengguna kelas publik {private integer ID; nama string pribadi; Pass string pribadi; usia bilangan bulat pribadi; pengguna publik () {} pengguna publik (nama string, string pass, integer usia) {this.name = name; this.pass = pass; this.age = usia; } pengguna publik (ID integer, nama string, string pass, integer usia) {this.id = id; this.name = name; this.pass = pass; this.age = usia; } getage integer publik () {usia kembali; } public void setage (usia integer) {this.age = usia; } public integer getId () {return id; } public void setid (integer id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } public string getPass () {return pass; } public void setPass (string pass) {this.pass = pass; }}Praktik yang baik adalah memberikan konstruktor kosong default, konstruktor lengkap dan konstruktor lengkap tanpa parameter ID.
Terhubung ke database
Kami dapat menggunakan kelas menengah untuk memfasilitasi koneksi ke database. Di kelas ini, kami akan memberikan parameter koneksi basis data seperti database JDBC, URL, nama pengguna dan kata sandi, dan mendefinisikan variabel -variabel ini sebagai final (akan lebih baik untuk mendapatkan data ini dari properti atau file konfigurasi XML)
Memberikan metode untuk mengembalikan objek koneksi atau mengembalikan nol ketika koneksi gagal atau melempar pengecualian runtime.
public static final String URL = "jdbc:mysql://localhost:3306/testdb";public static final String USER = "testuser";public static final String PASS = "testpass";/** * Get connection object* @return Connection object*/public static Connection getConnection() { try { DriverManager.registerDriver(new Driver()); return driverManager.getConnection (url, user, pass); } catch (sqlexception ex) {lempar runimeException baru ("kesalahan yang menghubungkan ke database", ex); }}Kami juga dapat memasukkan metode utama di kelas untuk menguji koneksi. Kelas lengkapnya terlihat seperti ini:
Impor com.mysql.jdbc.driver; import java.sql.connection; import java.sql.driverManager; import java.sql.sqlexception;/** * terhubung ke basis data * @Author hany.sad */public connectionFactory {public static string final Ur = "JDBC: mysql: // localhost: 3306/testdb"; Public Static Final String User = "TestUser"; public static final string pass = "testpass"; / ** * Dapatkan koneksi ke database * @Return Obyek koneksi */ koneksi statis public getConnection () {coba {driverManager.RegisterDriver (driver baru ()); return driverManager.getConnection (url, user, pass); } catch (sqlexception ex) {lempar runimeException baru ("kesalahan yang menghubungkan ke database", ex); }} / ** * uji koneksi * / public static void main (string [] args) {koneksi koneksi = connectionFactory.getConnection (); }}Objek akses data
Lapisan DAO dapat melakukan operasi CRUD. Itu dapat menambah, menghapus, memodifikasi, dan memeriksa tabel kami.
Antarmuka lapisan DAO kami seharusnya terlihat seperti ini:
antarmuka publik userdao {pengguna getUser (); Atur <User> getAllUsers (); Pengguna getUserByUserNeAndPassword (); boolean insertUser (); Boolean UpdateAser (); boolean deleteUser ();}Temukan pengguna
Pengguna dapat meminta melalui bidang unik seperti ID, nama, atau email. Dalam contoh ini, kami menggunakan ID untuk menemukan pengguna. Langkah pertama adalah membuat koneksi melalui kelas konektor, dan kemudian jalankan pernyataan pilih untuk mendapatkan pengguna dengan ID 7. Kami dapat menggunakan pernyataan ini untuk meminta pengguna:
Pilih * dari pengguna di mana id = 7
Di sinilah kami membuat pernyataan dinamis untuk mendapatkan ID dari parameter.
Dengan menjalankan kueri ini, set hasil diperoleh, di mana pengguna atau nol disimpan. Kita dapat menggunakan metode EXCHENTET NEXT () untuk mendeteksi apakah ada nilai. Jika benar dikembalikan, kami akan terus menggunakan pengambil data untuk mendapatkan data pengguna dari hasil. Ketika kami merangkum semua data menjadi pengguna, kami mengembalikannya. Jika pengguna dengan ID ini tidak ada atau pengecualian lainnya terjadi (seperti pernyataan SQL yang tidak valid), metode ini akan mengembalikan nol.
pengguna publik getUser (int id) {koneksi koneksi = connectionFactory.getConnection (); coba {pernyataan stmt = connection.createStatement (); Hasil rs = stmt.executeQuery ("Pilih * dari pengguna Where ID =" + id); if (rs.next ()) {pengguna pengguna = pengguna baru (); user.setid (rs.getint ("id")); user.setname (rs.getString ("name")); user.setpass (rs.getString ("pass")); user.setage (rs.getint ("usia")); Pengguna Kembali; }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Akan lebih nyaman untuk menggunakan metode terpisah untuk mengekstrak data dari set hasil, karena dalam banyak metode kita akan menyebutnya.
Metode baru ini akan melempar sqlexception dan demi batasan, itu harus pribadi:
Pengguna Private ExtractAserFromResultSet (hasil RS) melempar sqlexception {user user = User baru (); user.setid (rs.getint ("id")); user.setname (rs.getString ("name")); user.setpass (rs.getString ("pass")); user.setage (rs.getint ("usia")); mengembalikan pengguna;}Metode kami di atas harus dimodifikasi menjadi metode baru:
pengguna publik getUser (int id) {koneksi koneksi = connectionFactory.getConnection (); coba {pernyataan stmt = connection.createStatement (); Hasil rs = stmt.executeQuery ("Pilih * dari pengguna Where ID =" + id); if (rs.next ()) {return extractUserFromResultSet (rs); }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Metode login
Operasi login serupa. Kami ingin memberikan ID alternatif pengguna dan kata sandi, yang tidak akan mempengaruhi daftar parameter dan pernyataan kueri. Jika nama pengguna dan kata sandi benar, metode ini mengembalikan pengguna yang valid, jika tidak null. Karena ada banyak parameter, menggunakan persiapan disiapkan akan lebih berguna.
Pengguna publik getUserByUserNeMeAndPassword (string user, string pass) {connector connector = new connector (); Koneksi koneksi = connector.getConnection (); Coba {preparedStatement ps = connection.prepareStatement ("Select * From User Where User =? dan Pass =?"); ps.setstring (1, pengguna); ps.setstring (2, pass); Hasil rs = ps.executeQuery (); if (rs.next ()) {return extractUserFromResultSet (rs); }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Cara menanyakan semua pengguna
Metode ini akan mengembalikan semua pengguna, jadi kami harus mengembalikannya dalam wadah seperti array. Tetapi karena kita tidak tahu berapa banyak catatan yang ada. Akan lebih baik menggunakan koleksi seperti set atau daftar:
set publik getAllUsers () {connector connector = new connector (); Koneksi koneksi = connector.getConnection (); coba {pernyataan stmt = connection.createStatement (); Hasil rs = stmt.executeQuery ("Select * From User"); Set Users = New HashSet (); while (rs.next ()) {user user = extractUserFromResultSet (rs); Users.add (pengguna); } pengembalian pengguna; } catch (sqlexception ex) {ex.printstacktrace (); } return null;}Sisipkan metode
Metode INSERT akan mengambil pengguna sebagai parameter dan menggunakan objek disiapkan untuk menjalankan pernyataan pembaruan SQL. Metode ExecuteUpdate mengembalikan jumlah baris yang terpengaruh. Jika kami menambahkan satu baris, itu berarti bahwa metode tersebut harus mengembalikan 1, jika demikian, kami mengembalikan true, jika tidak, kami mengembalikan false
Public Boolean InsertAser (pengguna pengguna) {Connector Connector = New Connector (); Koneksi koneksi = connector.getConnection (); Coba {preparedStatement ps = connection.prepareStateMen ("masukkan ke nilai pengguna (null, ?,?,?)"); ps.setstring (1, user.getname ()); ps.setstring (2, user.getPass ()); ps.setint (3, user.getage ()); int i = ps.executeUpdate (); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } return false;}Metode Perbarui
Metode pembaruan mirip dengan metode insert. Satu -satunya perubahan adalah pernyataan SQL
Public Boolean UpdateAser (pengguna pengguna) {Connector Connector = New Connector (); Koneksi koneksi = connector.getConnection (); Coba {preparedStatement ps = connection.prepareStatement ("Perbarui nama pengguna set =?, pass =?, usia =? di mana id =?"); ps.setstring (1, user.getname ()); ps.setstring (2, user.getPass ()); ps.setint (3, user.getage ()); ps.setint (4, user.getId ()); int i = ps.executeUpdate (); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } return false;}Hapus metode
Metode untuk menghapus adalah dengan menggunakan kueri sederhana seperti
Hapus dari pengguna di mana id = 7
Mengirim kueri dengan parameter ID akan menghapus catatan ini. Jika berhasil dihapus, saya akan dikembalikan
Public Boolean DeleteUser (int id) {Connector Connector = New Connector (); Koneksi koneksi = connector.getConnection (); coba {pernyataan stmt = connection.createStatement (); int i = stmt.executeUpdate ("Hapus dari pengguna di mana id =" + id); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } return false;}Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!