Tutorial kali ini akan membahas tentang stored procedure MySQL dan pemanggilannya dalam aplikasi java dengan menggunakan objek CallableStatement.
MySQL Stored Procedure
Stored procedure pada intinya merupakan prosedur yang tersimpan di dalam database. Prosedur tersebut dapat menampung 1 atau lebih pernyataan SQL yang saling berhubungan.
Syntax pembuatan stored procedure adalah sebagai berikut :
CREATE PROCEDURE [nama_prosedur]
(
IN|OUT param_1 [tipe_data],
...
IN|OUT param_n [tipe_data],
)
BEGIN
[pernyataan sql 1];
[pernyataan sql 2];
[pernyataan sql n];
END
Sebagai contoh, perhatikan script SQL berikut :
DROP DATABASE IF EXISTS sample;
CREATE DATABASE sample;
USE sample;
CREATE TABLE barang (
kode VARCHAR(18) NOT NULL,
nama TEXT NOT NULL,
kategori VARCHAR(32) NOT NULL,
harga INT NOT NULL,
jumlah INT NOT NULL DEFAULT 1,
primary key (kode)
);
CREATE TABLE penjualan (
no INT NOT NULL AUTO_INCREMENT,
tanggal TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
kode_barang VARCHAR(18) NOT NULL,
jumlah INT NOT NULL DEFAULT 1,
PRIMARY KEY (no),
FOREIGN KEY (kode_barang) REFERENCES barang (kode)
);
-- Pembuatan Stored Procedure
DELIMITER &
CREATE PROCEDURE tambah_penjualan (IN _kdBarang VARCHAR(18), IN _jmlBarang INT)
BEGIN
SET @stok := (SELECT jumlah FROM barang WHERE kode = _kdBarang);
INSERT INTO penjualan (kode_barang, jumlah) VALUES (_kdBarang, _jmlBarang);
UPDATE barang SET jumlah = (@stok - _jmlBarang) WHERE kode = _kdBarang;
END &
DELIMITER ;
-- Tambah stok barang
INSERT INTO barang VALUES ("MB001", "Asus X370-F Gaming", "Motherboard", 4500000, 8);
Pada script diatas, pembuatan prosedur dilakukan pada baris 24 sampai 31. Dalam prosedur tersebut kita menggunakan tahapan yang umumnya terjadi dalam transaksi penjualan yaitu, menambah record penjualan kedalam tabel penjualan
yang dilanjutkan dengan pengurangan jumlah stok dalam tabel barang
.
Prosedur tersebut menggunakan 2 buah parameter yaitu, _kdBarang
merupakan kode dari barang yang terjual, dan _jmlBarang
yaitu berapa banyak barang yang terjual.
Proses yang terjadi dalam prosedur adalah sebagai berikut :
- Mengambil jumlah stok saat ini dari barang yang memiliki kode
_kdBarang
- Menambah record penjualan kedalam tabel
penjualan
- Memperbaharui jumlah barang dengan kode
_kdBarang
yaitu jumlah stok saat ini dikurangi jumlah terjual
Pemanggilan Prosedur
Prosedur diatas dapat dipanggil dengan menggunakan perintah :
CALL tambah_penjualan("MB001", 2);
Prosedur tersebut akan menambah record penjualan barang dengan kode MB001
dan memperbaharui jumlah stok barang MB001
menjadi 6 yaitu hasil pengurangan dari stok saat ini (8) dan jumlah terjual (2)
Pemanggilan Prosedur Melalui Aplikasi Java
Untuk memanggil prosedur MySQL dari aplikasi java, kita dapat menggunakan objek CallableStatement
.
Objek CallableStatement
terbentuk melalui metode prepareCall()
dari objek Connection
. Metode prepareCall()
menggunakan 1 parameter String yaitu perintah pemanggilan prosedur.
Perhatikan contoh berikut :
import java.sql.*;
public class CallableStatementSample {
static String url = "jdbc:mysql://127.0.0.1:3306/sample";
static String user = "root";
static String password = "";
public static void main(String[] args) {
try {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection koneksi = DriverManager.getConnection(url, user, password);
CallableStatement cstmt = koneksi.prepareCall("{CALL tambah_penjualan(?, ?)}");
cstmt.setString(1, "MB001");
cstmt.setInt(2, 2);
cstmt.executeUpdate();
cstmt.close();
koneksi.close();
}
catch(SQLException exc) {
System.err.println(exc.toString());
}
}
}