17 Haziran 2015 Çarşamba

JDBC - Statement Kavramı

Database ile bağlantı sağlandıktan sonra, artık database ile etkileşime girebiliriz. Bunun için, Statement, CallableStatement, and PreparedStatement arayüzleri sizlere database üzerinde SQL sorguları çalıştırabilmeniz ve bunun sonucunda verileri alabilmeniz amacıyla gerekli methodları sunar. Bunların yanı sıra sizlere Java ve SQL veri tipleri arasında ki farklılıklar için ayrıca bir köprü ortamı da sağlar. 


Statement Nesnesi

Bu yapıyı genel database işlemleri için kullanabilirsiniz. Runtime sırasında eğer static SQL sorguları kullanıyorsanız, bu yapı size yardımcı olacaktır. Ne yazık ki, Statement arayüzü, parametre kabul etmemektedir. 

Statement Nesnesinin Oluşturulması

Bir SQL sorgusunu çalıştırmak amacıyla Statement nesnesini kullanmadan önce, Connection nesnesinin createStatement( ) methodunu kullanarak, bir tane statement nesnesi oluşturmak zorundasınız.

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

Statement nesnesini oluşturduktan sonra, SQL sorgusunu çalıştırmak için kullanabileceğiniz 3 farklı yöntem bulunmaktadır. 

boolean execute (String SQL)ResultSet nesnesi döndürüldüğü taktirde size true değer verecektir. öteki durumda ise, false değer verecektir. 

int executeUpdate (String SQL): bu method ise size çalıştırılan SQL sorgusundan sonra kaç tane satırın bundan etkilendiği değerini verecektir. Bu methodu kullandığınız SQL sorgusundan sonra kaç tane satır etkilendiğini öğrenmek amacıyla kullanabilirsiniz. 

ResultSet executeQuery (String SQL): bu methodu sadece SQL sorgusu sonucunda bir result set bekliyorsanız kullanabilirsiniz. Örneğin SELECT sorgusunda olduğu gibi.


Statement Nesnesinin Kapatılması

Connection nesnesine ait bağlantıyı kapatmanız gerektiği gibi, aynı nedenlerden dolayı statement nesnesine ait olan bağlantıyı da kapatmanız gerekmektedir. Basit bir close() metodu bu işlemi yapacaktır. 

Eğer ilk olarak connection nesnesine ait olan bağlantıyı kapatırsanız, bu aynı zamanda statement nesnesine ait olan bağlantıyı da kapatacaktır. Yine de düzgün bir sistem olması için, siz yine de statement nesnesine ait olan bağlantıyı kendiniz kapatınız.

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   stmt.close();
}

 PreparedStatement Nesnesi

PreparedStatement arayüzü Statement arayüzünü extend eder. Bu durumda PreparedStatement arayüzüne ekstra özellikler katar.

PreparedStatement Nesnesinin Oluşturulması


PreparedStatement pstmt = null;
try {
   String SQL = "Update Employees SET age = ? WHERE id = ?";
   pstmt = conn.prepareStatement(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}
JDBC içerisinde yer alan parametreler ? sembolü ile temsil edilir. 

setXXX() methodu ise parametre olarak gönderilecek değerleri tutar. Burada yer alan XXX ifadesi ise parametre olarak gönderilecek değerin Java' da yer alan karşılığını temsil eder. Eğer burada değeri belirlemeyi unutacak olursanız, SQLException alacaksınız. 


PreparedStatement Kapatılması

Statement nesnesinin kapattığınız gibi, burada da PreparedStatement nesnesini kapatmanız gerekmektedir. 

PreparedStatement pstmt = null;
try {
   String SQL = "Update Employees SET age = ? WHERE id = ?";
   pstmt = conn.prepareStatement(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   pstmt.close();
}


CallableStatement Nesnesi

Connection nesnesi Statement ve PreparedStatement nesnelerini oluşturduğu gibi, aynı zamanda CallableStatement nesnesini de oluşturabilir. Bu nesneyi database içerisinde oluşturduğunuz Stored Procedure yapılarını çağırmak amacıyla kullanabilirsiniz.

CallableStatement Nesnesinin Oluşturulması

Platform fark etmeden örneğin, aşağıda ki gibi Oracle database içerisinde oluşturulmuş bir StoredProcedure yapısının çağırılması için;

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;

veya aşağıda ki gibi MySQL database içerisinde oluşturulmuş bir StoredProcedure 

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 ;
burada IN, OUT, and INOUT olmak üzere üç tür parametre vardır. PreparedStatement nesnesi sadece IN parametresi kullanmaktadır. CallableStatement nesnesi ise 3' ünü birden kullanabilmektedir. 
CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

CallableStatement Nesnesini kapatılması


Bu işleminde diğer kapatma işlemlerden bir farkı bulunmamaktadır. 

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

Hiç yorum yok:

Yorum Gönder