Search Bar

WHAT’S HOT NOW

Tutorial Java JDBC CRUD

 


Tutorial JDBC ini akan membantu Anda mempelajari cara melakukan operasi basis data dasar (CRUD - Buat, Ambil, Perbarui, dan Hapus) menggunakan API JDBC (Java Database Connectivity). Operasi CRUD ini setara dengan pernyataan INSERT, SELECT, UPDATE dan DELETE dalam bahasa SQL. Walaupun sistem basis data targetnya adalah MySQL, namun teknik yang sama dapat diterapkan untuk sistem basis data lain juga karena sintaks kueri yang digunakan adalah SQL standar yang didukung oleh semua sistem basis data relasional.

Kita akan belajar bagaimana melakukan insert, query, update dan delete database record dengan menulis kode untuk mengatur record dari tabel Users di database MySQL yang disebut SampleDB 

1. Prasyarat

Untuk memulai, pastikan Anda menginstal perangkat lunak berikut di komputer Anda:

2. Membuat contoh database MySQL

Mari buat database MySQL bernama SampleDB dengan satu tabel Pengguna dengan struktur berikut:

Struktur tabel pengguna

Jalankan skrip SQL berikut di dalam MySQL Workbench:

1
2
3
4
5
6
7
8
9
10
11
12
create database SampleDB;
 
use SampleDB;
 
CREATE TABLE `users` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT,
    `username` varchar(45) NOT NULL,
    `password` varchar(45) NOT NULL,
    `fullname` varchar(45) NOT NULL,
    `email` varchar(45) NOT NULL,
    PRIMARY KEY (`user_id`)
);
Atau jika Anda menggunakan program Klien Baris Perintah MySQL , simpan skrip di atas ke dalam file, katakanlah, SQLScript.sqldan jalankan perintah berikut:

sumber Path\To\The\Script\File\SQLScript.sql

Berikut adalah contoh tangkapan layar yang diambil saat menjalankan skrip di atas dalam program MySQL Command Line Client :



mengeksekusi skrip SQL

 


3. Memahami antarmuka dan kelas utama JDBC

Mari kita lihat ikhtisar antarmuka dan kelas utama JDBC yang biasa kita gunakan untuk bekerja. Semuanya tersedia di bawah paket java.sql :

    • DriverManager : kelas ini digunakan untuk mendaftarkan driver untuk tipe database tertentu (misalnya MySQL dalam tutorial ini) dan untuk membuat koneksi database dengan server melaluimetode getConnection() .
    • Koneksi : antarmuka ini mewakili koneksi (sesi) basis data yang dibuat dari mana kita dapat membuat pernyataan untuk mengeksekusi kueri dan mengambil hasil, mendapatkan metadata tentang basis data, menutup koneksi, dll.
    • Statement dan PreparedStatement : interface ini masing-masing digunakan untuk mengeksekusi query SQL statis dan query SQL berparameter. Pernyataanadalah antarmuka super dari antarmukaPreparedStatementMetode yang biasa mereka gunakan adalah:
      • boolean execution(String sql) : mengeksekusi pernyataan SQL umum. Ini mengembalikantruejika kueri mengembalikanResultSet,salahjika kueri mengembalikan jumlah pembaruan atau tidak mengembalikan apa pun. Metode ini hanya dapat digunakan denganPernyataan.
      • int executionUpdate(String sql) : mengeksekusi pernyataan INSERT, UPDATE atau DELETE dan mengembalikan akun pembaruan yang menunjukkan jumlah baris yang terpengaruh (misalnya 1 baris dimasukkan, atau 2 baris diperbarui, atau 0 baris terpengaruh).
      • ResultSet executionQuery(String sql) : mengeksekusi pernyataan SELECT dan mengembalikanResultSetyang berisi hasil yang dikembalikan oleh kueri.

Pernyataan yang disiapkan adalah pernyataan yang berisi placeholder (dalam bentuk tanda tanya ?) untuk nilai dinamis yang akan ditetapkan saat runtime. Sebagai contoh:

PILIH * dari Pengguna MANA user_id=?

Di sini nilai user_id adalah parameter dengan tanda tanya dan akan ditetapkan oleh salah satu metode setXXX() dari antarmuka PreparedStatement , misalnya setInt(int index, int value) .

    • ResultSet : berisi data tabel yang dikembalikan oleh kueri SELECT. Gunakan objek ini untuk mengulangi baris dalam set hasil menggunakan metode next() , dan dapatkan nilai kolom di baris saat ini menggunakan metode getXXX() (mis . getString() , getInt() , getFloat() dan seterusnya). Nilai kolom dapat diambil dengan nomor indeks (berbasis 1) atau dengan nama kolom.
    • SQLException : pengecualian yang diperiksa ini dideklarasikan untuk dilemparkan oleh semua metode di atas, jadi kita harus menangkap pengecualian ini secara eksplisit saat memanggil metode kelas di atas.  

4. Menghubungkan ke database

Misalkan server database MySQL mendengarkan pada port default 3306 di localhost . Cuplikan kode berikut terhubung ke nama database SampleDB oleh user root dan password secret :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String dbURL = "jdbc:mysql://localhost:3306/sampledb";
String username = "root";
String password = "secret";
 
try {
 
    Connection conn = DriverManager.getConnection(dbURL, username, password);
 
    if (conn != null) {
        System.out.println("Connected");
    }
catch (SQLException ex) {
    ex.printStackTrace();
}
Setelah koneksi dibuat, kami memiliki objek Connection yang dapat digunakan untuk membuat pernyataan untuk mengeksekusi kueri SQL. Pada kode di atas, kita harus menutup koneksi secara eksplisit setelah selesai bekerja dengan database:

1
conn.close();
Namun, sejak Java 7, kita dapat memanfaatkan pernyataan try -with-resources yang akan menutup koneksi secara otomatis, seperti yang ditunjukkan pada cuplikan kode berikut:

1
2
3
4
5
6
7
try (Connection conn = DriverManager.getConnection(dbURL, username, password)) {
     
    // code to execute SQL queries goes here...
     
catch (SQLException ex) {
    ex.printStackTrace();
}
Jika Anda menggunakan Java 7 atau lebih baru, pendekatan ini disarankan. Contoh program dalam tutorial ini semuanya menggunakan pernyataan try-with-resources ini untuk membuat koneksi database.

CATATAN: Untuk detail tentang menghubungkan ke database MySQL, lihat artikel: Hubungkan ke database MySQL melalui JDBC .

 

5. JDBC Jalankan Contoh Pernyataan INSERT

Mari tulis kode untuk menyisipkan record baru ke dalam tabel Users dengan detail sebagai berikut:

    • nama pengguna: bill
    • kata sandi: secretpass
    • nama lengkap: Bill Gates
    • email: bill.gates@microsoft.com
Berikut cuplikan kodenya:

1
2
3
4
5
6
7
8
9
10
11
12
String sql = "INSERT INTO Users (username, password, fullname, email) VALUES (?, ?, ?, ?)";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1"bill");
statement.setString(2"secretpass");
statement.setString(3"Bill Gates");
statement.setString(4"bill.gates@microsoft.com");
 
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
    System.out.println("A new user was inserted successfully!");
}
Dalam kode ini, kami membuat pernyataan SQL INSERT berparameter dan membuat PreparedStatement dari objek Connection . Untuk menyetel nilai parameter dalam pernyataan INSERT, kita menggunakan metode setString() dari PreparedStatement karena semua kolom dalam tabel Users bertipe VARCHAR yang diterjemahkan menjadi tipe String di Java. Perhatikan bahwa indeks parameter berbasis 1 (tidak seperti indeks berbasis 0 dalam array Java).

Antarmuka PreparedStatement menyediakan berbagai metode setXXX() yang sesuai dengan setiap tipe data, misalnya:

    • setBoolean(int parameterIndex, boolean x)
    • setDate(int parameterIndex, Tanggal x)
    • setFloat(int parameterIndex, float x)
Dan seterusnya. Metode mana yang akan digunakan tergantung pada jenis kolom yang sesuai dalam tabel database.

Akhirnya kita memanggil metode executionUpdate() dari PreparedStatement untuk mengeksekusi pernyataan INSERT. Metode ini mengembalikan hitungan pembaruan yang menunjukkan berapa banyak baris dalam tabel yang dipengaruhi oleh kueri, jadi memeriksa nilai kembalian ini diperlukan untuk memastikan kueri berhasil dijalankan. Dalam hal ini, metode executionUpdate() harus mengembalikan 1 untuk menunjukkan bahwa satu record telah dimasukkan.

 

6. JDBC Jalankan Contoh Pernyataan SELECT

Cuplikan kode berikut mengkueri semua catatan dari tabel Pengguna dan mencetak detail untuk setiap catatan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String sql = "SELECT * FROM Users";
 
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery(sql);
 
int count = 0;
 
while (result.next()){
    String name = result.getString(2);
    String pass = result.getString(3);
    String fullname = result.getString("fullname");
    String email = result.getString("email");
 
    String output = "User #%d: %s - %s - %s - %s";
    System.out.println(String.format(output, ++count, name, pass, fullname, email));
}
Keluaran:

Pengguna #1: bill - secretpass - Bill Gates - bill.gates@microsoft.com

Karena kueri SQL SELECT di sini bersifat statis jadi kami hanya membuat objek Pernyataan dari koneksi. Perulangan while mengulangi baris-baris yang terdapat dalam set hasil dengan berulang kali memeriksa nilai kembalian dari metode next() dari ResultSet . Metode next() menggerakkan kursor ke depan dalam kumpulan hasil untuk memeriksa apakah ada catatan yang tersisa. Untuk setiap iterasi, kumpulan hasil berisi data untuk baris saat ini, dan kami menggunakan metode getXXX (indeks kolom/nama kolom) dari ResultSet untuk mengambil nilai kolom tertentu di baris saat ini, misalnya pernyataan ini:

1
String name = result.getString(2);
Mengambil nilai kolom kedua di baris saat ini, yang merupakan bidang nama pengguna . Nilai dicor ke String karena kita tahu bahwa bidang nama pengguna bertipe VARCHAR berdasarkan skema database yang disebutkan sebelumnya. Perlu diingat bahwa indeks kolom di sini berbasis 1, kolom pertama berada di indeks 1, yang kedua di indeks 2, dan seterusnya. Jika Anda tidak yakin atau tidak tahu persis indeks kolom, memberikan nama kolom akan berguna:

1
String fullname = result.getString("fullname");
Untuk tipe data lainnya, ResultSet menyediakan metode pengambil yang sesuai:

    • getString()
    • getInt()
    • getFloat()
    • getDate()
    • getTimestamp()
TIPS: Mengakses nilai kolom berdasarkan indeks kolom akan memberikan kinerja yang lebih cepat daripada nama kolom.

 

7. Contoh Pernyataan UPDATE Pelaksana JDBC

Cuplikan kode berikut akan memperbarui catatan "Bill Gates" seperti yang kami masukkan sebelumnya:

1
2
3
4
5
6
7
8
9
10
11
12
String sql = "UPDATE Users SET password=?, fullname=?, email=? WHERE username=?";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1"123456789");
statement.setString(2"William Henry Bill Gates");
statement.setString(3"bill.gates@microsoft.com");
statement.setString(4"bill");
 
int rowsUpdated = statement.executeUpdate();
if (rowsUpdated > 0) {
    System.out.println("An existing user was updated successfully!");
}
Kode ini terlihat sangat mirip dengan kode INSERT di atas, kecuali jenis kuerinya adalah UPDATE.


8. JDBC Jalankan Contoh Pernyataan DELETE

Cuplikan kode berikut akan menghapus catatan yang bidang nama penggunanya berisi "tagihan":

1
2
3
4
5
6
7
8
9
String sql = "DELETE FROM Users WHERE username=?";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1"bill");
 
int rowsDeleted = statement.executeUpdate();
if (rowsDeleted > 0) {
    System.out.println("A user was deleted successfully!");
}
Sejauh ini kami memiliki satu melalui beberapa contoh yang menunjukkan bagaimana menggunakan JDBC API untuk mengeksekusi pernyataan SQL INSERT, SELECT, UPDATE dan DELETE. Poin-poin penting yang perlu diingat adalah:

    • Menggunakan Pernyataan untuk kueri SQL statis.
    • Menggunakan PreparedStatement untuk kueri SQL berparameter dan menggunakan metode setXXX() untuk menetapkan nilai parameter.
    • Menggunakan metode execution() untuk mengeksekusi kueri umum.
    • Menggunakan metode executionUpdate() untuk mengeksekusi kueri INSERT, UPDATE, atau DELETE
    • Menggunakan metode executionQuery() untuk mengeksekusi kueri SELECT.
    • Menggunakan ResultSet untuk mengulangi baris yang dikembalikan dari kueri SELECT, menggunakan metode next() untuk melanjutkan ke baris berikutnya dalam kumpulan hasil, dan menggunakan metode getXXX() untuk mengambil nilai kolom.

Subscribe to receive free email updates:

0 Response to "Tutorial Java JDBC CRUD"

Post a Comment