Java Dersleri 17 – JDBC API (Veritabanı Bağlantısı)

Java Dersleri 17 JDBC

Java Dersleri 17 JDBC


Bu makalede Java’nın veritabanı kabiliyetlerinden bahsedeceğim. Java’nın tüm veritabanlarına ulaşmak için kullandığı ortak bir API vardır. JDBC (Java Database Connectivity ) API uygulamamızı arka taraftaki veritabanı sisteminden soyutlamamıza olanak tanır. Bunu yapabilmek için elimizde bağlanmak isetdiğimiz veritabının JDBC sürücüsü olmalıdır. Örneğin HSQLDB bağlantısı yapmak istiyorsak bu veritabanı yönetim sistemine ait JDBC sürücüsünü içeren JAR dosyasını projemize eklemeliyiz. Daha sonra bu JAR dosyası içinde bulunan driver sınıfını proje içindeyken JVM’e yüklenmesini sağlamalıyız.

Class.forName("org.hsqldb.jdbcDriver");

Yukarıdaki kod satırı HSQLDB sürücü sınıfını JVM’e yükler. Bu sürücüyü kullanarak veritabanına bağlantı elde etmek için ise :

hsqldbConnection = DriverManager.getConnection("jdbc:hsqldb:file:"+ databaseName, userName, password);

Buradaki ilk parametre bağlanmak istediğiniz veritabanı tipine göre değişecektir. Buradaki hsqldbConnection nesnesi java.sql.Connection arayüzünü gerçekler. Bu arayüzde veritabanı işlemleri yaparken kullanacağımız metodlar bulunur. Bağlantıyı sağladıktan sonra yapmak isteyeceğimiz ilk şey muhtemel bir SQL sorgusu çalıştırmak olacaktır. Bunun için Connection arayüzünün prepareStatement() metodlarını kullanabiliriz.

public ResultSet runSelectQuery(String sqlSorgu) throws SQLException
{
Statement s = hsqldbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,            ResultSet.CONCUR_UPDATABLE);
return  s.executeQuery(sqlSorgu);
}

Yukarıdaki metod bir sql sorgusu (SELECT) çalıştırarak sonucunu ResultSet nesnesi olarak dışarıya vermektedir. Burada Connection nesnemizden create statement() metoduyla bir Statement nesnesi oluşturduk. Bu nesneyi kullanarak da elimizdeki sql sorgusunu çalıştırdık. SELECT sorgusu bize sonuç döndüğü içn executeQuery() metodunu kullandık. Eğer sonuç dönmeyen UPDATE, DELETE tarzı sql sorgusu çalıştırmak isteseydik executeUpdate() metoduna başvurmalıydık. Burada kullanımı görelim :

public int runInsertUpdateQuery(String query) throws SQLException
{
Statement s = hsqldbConnection.createStatement();
return s.executeUpdate(query);
}

Temel olarak yukarıda anlattığım yöntemle veritabanında istediğiniz sorguyu çalıştırabilirsiniz. Bunun dışında veritabanındaki Stored Procedure’leri çalıştırmak isterseniz Connection arayüzünün prepareCall() metodu kullanılmalıdır. Bu metoda vereceğiniz parametre {? = call prosedürismi(?,?)} şeklinde veya {call prosedürismi(?,?)} şeklinde olabilir. Burada öenmli olan nokta çıktı veren prosedürlerde çağırım yapılmadan önce çıktı tiplerinin tanıtılmasıdır. Bir örnekle kullanımı görelim :

 public void callProcedure(String procedure) throws SQLException
{
CallableStatement s =hsqldbConnection.prepareCall("{ ? = yasi_ver(?) }");
s.registerOutParameter(1, Types.INTEGER);
s.setString(2, "orhan");
s.execute();
int yas = s.getInt(1);
}

Bu örneğimizde veritabanında olduğunu farz ettiğimiz yasi_ver prosedürünü çalıştırdık. Bu prosedür parametre olarak String tipinde bir isim alıyor ver geriye o kişinin int tipinde yaşını dönüyor. Prosedürü çalıştırmadan önce registerOutParameter() metoduyla geri alacağımız değeri bildiriyoruz.

JDBC ile ilgili olarak bilmemiz gereken bir diğer özellik ise arkadaki VTYS’den bağımsız olarak scaler fonksiyonları çağırabilme özelliğidir. Scalar fonksiyonlardan kasıt bize sayısal değer dönen COUNT() DATE_TIME() tarzı fonksiyonlardır. Her JDBC driveri bütün scalar fonksiyonları desteklemez. Kullandığınız driver’in desteklediği scalar fonksiyonları listelemek için :

 hsqldbConnecion =  (Connection) DriverManager.getConnection("jdbc:hsqldb:file:"
				+ databaseName, userName, password);
 hsqldbConnecion.setAutoCommit(true);
 DatabaseMetaData dbmd = hsqldbConnecion.getMetaData();
 System.out.println(dbmd.getNumericFunctions());

Yukarıda gördüğümüz üzere Connection nesnemizden DataBaseMetaData’sını sorgulayıp oradan veritabanının desteklediği numeric fonksiyonların listesine ulaşabiliyoruz. Bu fonksiyonlardan herhangi birini çağırmak için ise :

Statement s = hsqldbConnecion.createStatement();
ResultSet rs = s.executeQuery("{ABS(-3)}");

satırlarını kullanıyoruz.

Burada ResultSet’lerin özelliklerine de değinmek istiyorum. Yaptığımız sorguların karşılığında Statement nesneleri bize ResultSet nesnesi döner. ResultSet nesnelerinin tamamı üzerinde istediğimiz şekilde gezinmemize olanak tanımazlar. JDBC sürücüleri genel olarak 3 tip ResultSet gezinimi desteklerler. Bunlar :

ResultSet.TYPE_FORWARD_ONLY : Bu ResultSet üzerinde kursör sadece ileri doğru gider. Sadece tek sefer okuma mümkündür.
ResultSet.TYPE_SCROLL_INSENSITIVE : Bu ResultSet üzerinde kursör ileri geri gidebilir. Bu esnada veri tabanında tabloda meydana gelen değişiklikler ResultSet nesnesine yansımaz.
ResultSet.TYPE_SCROLL_SENSITIVE : 2. tip ResultSet’ten farkı okuma esnasında tabloda meydana gelen değişikliklerin ResultSet nesnesine yansıtılmasıdır.

ResultSet’lerin diğer önemli bir özelliği de güncellenebilir olup olmamalarıdır. Bu özelliği yukarıdaki özellikle birlikte createStatement metoduna parametre olarak veriyoruz. Örneğin Result set üzerinde ileri geri gitmek ve istediğimiz satırı ResultSet üzerinde değiştirebilmek istiyorsak şu satırları kullanmalıyız:

Statement stmt = hsqldbConnecion.createStatement(
                       ResultSet.TYPE_SCROLL_INSENSITIVE,
                       ResultSet.CONCUR_UPDATEABLE);
ResultSet scrollingRS = stmt.executeQuery("SELECT * FROM kullanicilar");

Referanslar:
JDBC Hakkında Bilmediğiniz 5 Şey
Yazıyı Faydalı Bulduysanız Reklamlara Tıklayarak Siteye Destek Olabilirsiniz

İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır....
  3. Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından...
  4. Java Dersleri 20 – JAXB API – Java Nesnelerini XML Dökümanları ile Bağlama Daha önce bloğumuzda Java’da XML işlemlerini anlatan bir ders yayınlamıştık....
  5. HSQLDB İpuçları HSQLDB’yi sunucu kipinde çalıştırmak için : java -cp ./hsqldb.jar...

Fikrin geldiyse buraya yaz


[ Ctrl + Enter ]