Java Database Connectivity (JDBC) adalah API yang memungkinkan program Java
berinteraksi dengan berbagai jenis database, termasuk PostgreSQL. JDBC menyediakan cara
standar untuk menghubungkan dan berkomunikasi dengan database menggunakan bahasa
pemrograman Java.
Untuk contoh pembelajaran kali ini, saya akan membuat aplikasi CRUD data produk.
Persyaratan
Editor (Intellij Idea, Netbeans, Visual Studio Code, dll)
Database (PostgreSQL)
Java 17
Persiapan
Karena aplikasi yang akan kita buat akan terhubung dengan database, tahap pertama
yang akan kita lakukan membuat database-nya terlebih dahulu.
Buatlah sebuah database di PostgreSQL dengan nama db_retail.
Setelah berhasil membuat database, sekarang buatlah sebuah table dengan nama
master_produk yang akan kita gunakan untuk menampung data produk.
create table master_produk
(
id bigserial NOT NULL,
kode_produk varchar(50) not null,
nama_produk varchar(50) not null,
CONSTRAINT master_produk_pkey primary key(id),
CONSTRAINT kode_produk_unique unique(kode_produk)
);
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>id.aban</groupId>
<artifactId>belajar-jdbc</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>belajar-jdbc</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Produk {
private long id;
private String kodeProduk;
private String namaProduk;
}
Entity class dalam Java merupakan representasi objek dari entitas atau tabel
dalam database yang akan digunakan untuk menghubungkan data antara database dan
aplikasi yang kita buat. Setiap objek instance dari entity class mewakili satu baris
dalam tabel di database.
Setelah itu, kita buat sebuah Connection yang akan digunakan untuk
menghubungkan aplikasi yang kita buat dengan database.
import java.sql.Connection;
import java.sql.DriverManager;
Ada beberapa point yang perlu diperhatikan saat membuat Connection, yang
pertama adalah url. Pada url terdapat bagian alamat dimana database tersebut berada, jika
database-nya di install pada komputer yang berbeda, kalian harus ubah alamatnya misalnya :
192.168.1.10 atau db.retail.com bisa menggunakan nama domain atau IP
Address. Karena database-nya di install di komputer sama, maka kita dapat menggunakan
localhost atau 127.0.0.1.
Saat kalian install postgres secara default akan mendapatkan port 5432, dan kalian
tidak perlu menambahkan port pada url-nya. Jika saat melakukan install postgres kalian
merubah port default-nya maka kalian harus mencantumkan juga port-nya,
Misalnya : localhost:7117.
Pada url terdapat db_retail, itu merupakan nama database yang akan kita
hubungkan dengan aplikasi yang kita buat.
Untuk user dan password kalian dapat menyesuaikan dengan username dan
password untuk masuk ke database-nya.
import id.aban.entities.Produk;
import java.util.List;
import id.aban.entities.Produk;
import lombok.Cleanup;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@Cleanup
PreparedStatement ps = con.prepareStatement(
"SELECT * FROM master_produk"
);
@Cleanup
ResultSet rs = ps.executeQuery();
Disusun Oleh : Cahendi__________________________________________________
while (rs.next()) {
list.add(Produk.builder()
.id(rs.getLong("id"))
.kodeProduk(rs.getString("kode_produk"))
.namaProduk(rs.getString("nama_produk"))
.build());
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return list;
}
@Cleanup
PreparedStatement ps = con.prepareStatement(
"SELECT * FROM master_produk WHERE kode_produk = ?"
);
ps.setString(1, kodeProduk);
@Cleanup
ResultSet rs = ps.executeQuery();
if (rs.next()) {
return Produk.builder()
.id(rs.getLong("id"))
.kodeProduk(rs.getString("kode_produk"))
.namaProduk(rs.getString("nama_produk"))
.build();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return Produk.builder().build();
}
class AppMainTest {
@BeforeEach
void init() {
sql = new ProdukSQLImpl();
}
@Test
public void findAll() {
System.out.println("Ambil Data Semua Produk");
List<Produk> list = sql.findAll();
for (Produk p : list) {
System.out.println(p);
}
}
@Test
public void findById() {
System.out.println("Ambil Data Kode Produk = A0001");
Produk p = sql.findByKodeProduk("A0001");
System.out.println(p);
}
@Test
public void createProduk() {
System.out.println("Simpan Data Produk");
Produk p = Produk.builder()
.kodeProduk("P0023")
.namaProduk("SSD NVME")
.build();
sql.create(p);
@Test
public void deleteProduk() {
System.out.println("Hapus Data Produk");
Produk p = Produk.builder()
.kodeProduk("P0023")
.namaProduk("SSD NVME")
.build();
sql.deleteById(6);
}
}