Eksekusi Stored Procedure dengan Java

Berhubung minggu malam ini hujan deras dan tidak bisa keluar kost, akhirnya saya iseng membuka IDE Eclipse yang lama tidak tersentuh hehe. Tema ngodingnya adalah eksekusi stored procedure dengan bahasa pemrograman Java. Java secara native memiliki kemampuan ini, karena didukung oleh JDBC dan seabreg librarynya.

Untuk percobaan, saya menggunakan DBMS SQL Server 2008R2 dengan library JTDs. Untuk mengeksekusinya saya prefer menggunakan class Callable Statement dan bukan Prepared Statement. Kenapa menggunakan Callable Statement? Karena object yang dieksekusi (SP) sudah tercompile di dalam RDBMS, dan bukan object mentah seperti query DML.

Selain itu Callable memang didesain untuk mengeksekusi stored procedure karena memiliki method untuk menghandle parameter out dan in. Berikut snippetnya :

USE [AppDB]
GO
/****** Object:  StoredProcedure [dbo].[sp_name]    Script Date: 11/08/2015 23:35:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		nandcep
-- Create date: 07-11-2015
-- Description:	example only
-- =============================================
CREATE PROCEDURE [dbo].[sp_name] 
	-- Add the parameters for the stored procedure here
	@in_id varchar(50)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	SELECT data from dummy
	where id = @in_id; 
END

Baris kode di atas adalah stored procedure yang akan dihajar di dalam Java. Berikut Javanya :

try{
	CallableStatement callableStatement = DBConnection.getConnection().prepareCall("EXEC sp_name ?"); //execute sp dengan callable, parameter diwakilkan sebagai ?
	callableStatement.setEscapeProcessing(true);
	callableStatement.setString(1, "IDX0123ZZYY"); //parameter beserta indexnya
	executed = callableStatement.execute(); //eksekusi
	ResultSet resultSet = callableStatement.getResultSet();
	while(resultSet.next()){
		data = resultSet.getString("data"); //mendapatkan data yang ada di dalam store procedure (lihat baris terakhir)
	}
}
catch(Exception e){
	throw new BaseError(DBConnectionConstant.ERR_SQL_NOT_EXECUTE);
}
if(!executed){
	throw new BaseError(DBConnectionConstant.ERR_SQL_NOT_EXECUTE);
}

Oke lah sudah larut malam, saatnya tidur. Selebihnya monggo dicermati pada bagian comment kode. Semoga bermanfaat 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s