JDBC (8) : CallableStatement

Oleh : Reza Ervani

Referensi :

  1. Tutorials Point – JDBC Introduction
  2. Vogella – MySQL and JDBC – Lars Vogel
  3. Eclipse & JDBC – Russell Bateman

بسم الله الرحمن الرحيم

Objek CallableStatement

Sebagaimana objek Connection membuat objek Statement dan PreparedStatement, dia juga membuat objek CallableStatement yang akan digunakan untuk mengeksekusi panggilan ke prosedur penyimpanan database.

Membuat Objek CallableStatement

Anggap kita perlu mengeksekusi prosedur penyimpanan Oracle seperti berikut :

[code language=”sql”]

CREATE OR REPLACE PROCEDURE getEmpName
(EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS
BEGIN
SELECT first INTO EMP_FIRST
FROM Employees
WHERE ID = EMP_ID;
END;

[/code]

CATATAN : Prosedur penyimpanan yang dicantumkan diatas ditulis untuk Oracle, tetapi kita akan bekerja dengan database MySQL/MariaDB yang formatnya dapat kita buat seperti berikut :

[code language=”sql”]

DELIMITER $$

DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName`
(IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
SELECT first INTO EMP_FIRST
FROM Employees
WHERE ID = EMP_ID;
END $$

DELIMITER ;

[/code]

Tiga tipe parameter yang ada : IN, OUT dan INOUT. Objek PreparedStatement hanya menggunakan parameter IN, sementara objek CallableStatement dapat menggunakan ketiganya sekaligus. Berikut definisi masing-masing :

Parameter Deskripsi
IN Sebuah parameter dimana nilai tidak diketahui saat statement SQL dibuat. Kita mengikat nilai ke parameter IN dengan metode setXXX()
OUT Sebuah parameter dimana nilai diberikan oleh keluaran dari statement SQL. Kita menerima nilai dari parameter OUT dengan metode getXXX()
INOUT Sebuah parameter yang menyediakan baik nilai input maupun output. Kita mengikat variabel dengan metode setXXX() dan menerima nilai dengan metode getXXX()

Potongan kode berikut menunjukkan bagaimana menggunakan metode Connection.prepareCall() untuk memulasi objek CallableStatement berbasis pada prosedur penyimpanan yang ada sebelumnya :

[code language=”java”]

CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall (SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
. . .
}

[/code]

variabel String SQL mewakili prosedur penyimpanan, dengan penampung parameter

Menggunakan objek CallableStatement adalah lebih seperti menggunakan objek PreparedStatement. Kita mesti mengikat nilai ke semua parameter sebelum mengeksekusi statement, atau jika tidak maka kita akan menerima SQLException.

Jika kita memiliki parameter IN, cukup mengikuti aturan dan teknik yang sama yang diterapkan pada objek PreparedStatement, gunakan metode setXXX() yang berhubungan dengan tipe data Java yang kita binding.

Saat kita menggunakan parameter OUT dan INOUT kita mesti menerapkan metode tambahan CallableStatement yakni registerOutParameter(). metode registerOutParameter() mengikut tipe data JDBC ke tipe data yang diharapkan dikeluarkan oleh prosedur penyimpanan.

Setelah kita memanggil prosedur penyimpanan, kita menerima nilai dari parameter OUT dengan metode getXXX() yang cocok. Metode ini melemparkan nilai yang diterima dari tipe SQL ke tipe data Java.

Menutup Objek  CallableStatement

Seperti saat kita menutup objek Connection untuk menghemat resource database, alasan yang sama juga kita lakukan saat menutup objek CallableStatement.

Panggilan sederhana metode close() kita gunakan untuk melakukan hal ini. Jika kita pertama-tama menutup objek Connection, maka dia akan juga sekaligus menutup objek CallableStatement. Tapi bagaimanapun, kita mesti selalu secara eksplisit menutup objek CallableStatement untuk memastikan cleanup yang diinginkan.

 

[code language=”java”]

CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall (SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
cstmt.close();
}

[/code]

Bersambung insya Allah (reza@rumahilmu.or.id)

About Reza Ervani 425 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.