02 Desember 2017
Java & MySQL (3) - Menggunakan Stored Procedure MySQL dan CallableStatement

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 : 1. Mengambil jumlah stok saat ini dari barang yang memiliki kode _kdBarang 2. Menambah record penjualan kedalam tabel penjualan 3. 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());
    }
  }

}