JDBC-1- ( Java Database Connectivity )

JDBC ( Java Database Connectivity )

Verileri toplamak, yönlendirmek, istenildiği zaman ulaşabilmek gibi uygulamalar günümüzde büyük ihtiyaç haline gelmişlerdir. Eski zamanlarda bu tür uygulamalar kağıtlara yazılarak gerçekleştirilirken teknolojinin gelişmesi ile beraber bilişim dünyasında bu tür uygulamalar dijital olarak saklanmaktadır. Bunun sonucunda DBMS ( Database Management Systems ) oluşumu sağlanmaktadır.

İlişkisel Veritabanı ( Relational Database )

İlişkisel veritabanın temelleri satırların ve sütunların oluşturduğu tablolardır. Yatay olarak satırları, dikey olarak sütunları kullanan bu tablolarda her satır tablonun bir elementidir.

Ad Soyad Şehir Meslek
Uğur Mumcu Ankara Araştırmacı Yazar
Ahmet Taner Kışlalı Ankara Avukat,Yazar
Necip Hablemitoğlu Ankara Öğretim Görevlisi, Yazar

Bilgilerimizi yukardaki gibi tablolar halinde veritabanında saklayacağız. JDBC ile veritabanlarına nasıl ulaşılacağını ve JDBC mimarisini yazımızın devamında aktarmadan önce sisteminize bir veritabanı kurmanız gerecektir. Anlatımımı mysql veritabanı üzerinden yapmayı tercih ettim. Bu yazıyı daha iyi anlamak için ilişkisel veritabanında kullanılan SELECT, UPDATE, INSERT ve DELETE komutlarını incelemenizi öneririm. ( mysql benim kişisel tercihimdir, başka bir veritabanı da kurabilirsiniz. )

JDBC Nedir?

Java’nın “bir kere yaz her yerde çalıştır” genel prensibine uygun olarak veritabanları ve diğer tabular veri kaynaklarına, sürücüler üzerinden SQL ile erişimi sağlayan API ( Application programming interface- yazılım kütüphanelerine genel olarak verilen isim )’sidir. Java platformunun bir çekirdeği olan JDBC, standart JDK dağıtımlarında bulunmaktadır.

JDBC Mimarisi

Yazılımcılar JDBC API’yi kullanarak veritabanından bağımsız kod geliştirebilirler. Java uygulamaları JDBC API üzerinden ilgili sürücü ver veritabanından kod seviyesinde bağımsız olarak çalışabilmektedir.

Uygulamalar JDBC ile temel olarak veri tabanına bağlanma, bu bağlantı üzerinden SQL komutu çalıştırma ve çalıştırılan SQL komutlarının sonuçlarını işleme gibi operasyonları yapabilmektedir.

JDBC API’si kullanılan veritabanına göre sürücüler ve Sürücü Yöneticisi ( Driver Manager ) ile farklı veritabanlarına bağlantı sağlar. Bu durum Java’nın genel prensibine bağlılığını göstermektedir. JDBC driver manager sayesinde her bilgi kaynağına ulaşımı doğru sürücüler ile yapıldığını kontrol eder. Driver manager, farklı veritabanlarına bağlı olan eş zamanlı olarak çalışabilen birden fazla sürücüyü yönetibilir. Aşağıda şekilde driver manager’ın kontrolündeki sürücüler ve sürücülerin farklı veritabanlarıyla nasıl bağlantı sağladığını görebilirsiniz.

JDBC sürücüleri ile oluşturulan translation layer kısmıyla Java uygulamalarını farklı veritabanlarıyla çalışması sağlanmasını sağlamaktadır. Sonuç itibariyle Java uygulamaları veritabanlarından bağımsız olarak çalışabilmekdir.

Eğer uygulamanın altında çalışan veritabanın değişmesi driver manager kısmında yapılacak birkaç kod değişimiyle sorunsuz bir şekilde uygulamanın çalışması sağlanacaktır. Dört farklı JDBC sürücüsü vardır.

Tip 1 ( Type-1 ) : JDBC-ODBC ( open database connectivity ) Bridge : JDBC-ODBC köprüsü olarak bilinen JDBC Tip 1 sürücüsü ODBC sürücüsünün veritabanına bağlantıyı sağlamak için kullanan bir veritabanı sürücü uygulamasıdır. Bu sürücü JDBC metod çağırmalarını ODBC fonksiyon çağırmalarına dönüştürür. Köprü genellikle belirli bir veritabanı için Java’ya özgü sürücülerin bulunmadığı zamanlarda kullanılmaktadır.

Tip 1 sürücüsü sun.jdbc.odbc.JdbcOdbcDriver sınıfı içersinde uygulandı ve Java 2 SDK, Standart Sürümü ile birlikte kullanılmaya başlanmıştır. Tip 1 sürücüsü işletim sisteminin yerel kütüphanelerine göre dönüşüm sergileyen ODBC’yi kullanarak platformdan bağımsız bir yapı sergiler. Ayrıca bu sürücüyü kullanmak için diğer bağımlılıkları da sahip olmak gerekiyor. Örnek olarak ODBC, sürücüyü bulunduran bilgisayarda yüklü olmalı ve uygulamanın bağlı olarak bulunduğu veritabanı bir ODBC sürücüsünü desteklemeli. Bundan dolayıdır eğer alternatif Java’ya özgü bir sürücüye sahipseniz bu sürücünün kullanılması yanlış olur.

Tip 1 sürücüsü diğer sürücüler arasında en basit yapıya sahip olanı ama her platforma göre farklılık göstermesi bu tip sürücülerin dezavantajı oluyor. Örnek olarak Microsoft platformu gibi.

JDBC-ODBC köprüsü bir veya daha fazla ODBC sürüsü sayesinde JDBC API’ye erişimi sağlamaktadır. Bu tip sürücüyü kullanan her istemci bilgisayarda ODBC yerel codu ve yerel veritabanı istemci kodu yüklenmelidir. Bundan dolayı, Java teknolojisinin otomatik yükleme ve indirme uygulamaları göz ardı edilebilirse bu tip sürücüyü kullabilirsiniz.

Tip 1 sürücüleri köprü sürücüleridir. Bu tip sürücüler veritabanı ile bağlantı kurmak için ODBC gibi başka sistemler kullanmaktadır. ODBC sürücülerinin çoğu ilişkisel veritabanı platformlarında var olmasından dolayı bu durum bir avantajdır. JDBC sürücüsündan ODBC fonksiyonları çağırmak için Java Native Interface kullanılır.

Fonksiyonları :

1- JDBC tarafından oluşturulan sorgular, daha sonraları ODBC sürücüleri tarafından yürütülecek olan ODBC sorgularına dönüştürülür.

2- Sun, sun.jdbc.odbc.JdbcOdbcDriver aracılığıyla JDBC-ODBC köprü sürücünü sağlar. Bu sürücü yerel koddur ve Java değildir. Bu kod kapalı kaynaktır.

Avantajları :

ODBC sürücüsünün yüklü olarak bulunduğu hemen hemen tüm veritabanlarına erişim sağlanabilir olması.

Dezavantajları :

1- İstemci bilgisayarında ODBC sürüsünün yüklü olarak bulunması. İstemci açısından olaya bakarsak yazılımın yüklenmesi gerekli bu applet’ler için uygun olmayabilir.

2- Çağırımlar JDBC aracılığıyla ODBC sürüsüne aktarıldıktan sonra yerel veritabanına aktarılması performansın düşük olmasına neden olmaktadır.

Tip 2 ( Type-2 ) Java to Native API : Native API sürücüsü olarak da bilinen Tip 2 sürücüsü, veritabanının istemci tarafından oluşturulan kütüphanelerini kullanarak veritabanına bağlantı sağlar. Bu sürücü JDBC metod çağrımlarını veritabanı API’sinin yerel çağrımlarına çevirir.

Bu tip sürücüler, son veritabanı çağrımlarını yapan arayüz kısmı gibi baştan sonra Java kodlarıyla yazılmamıştır. Bu sürücü belirli işletim sistemlerinin kullanımı için kullanılır. Platform uyumu için tümü Java uygulamlarından oluşan Tip 4 sürücüsü tercih edilir.

Kısmi olarak Java teknolojisiyle oluşturulan sürücülerin etkin olarak kullanıldığı sürücü JDBC çağrımlarını Oracle, Sybase, Informix, DB2, or other DBMS için istemci API’sindeki çağrımlarına çevrilir. Tip 1 sürücüsü gibi, bu tip sürücü de istemci bilgisayarında bazı ikilik ( binary) kodların yüklü olması gerekir. Ancak Tip 2 sürücüsü, Tip 1 sürücüsünde yapılan ODBC fonksiyon çağrımlarını kullanmadığı için daha işlevsel ve performansı de daha yüksektir.

Tip 2 sürücüleri veritabanına erişimi yerel API ile sağlamaktadır. Tip 2 sürücüsü Java Native Inteface de kullanmaktadır. Yerel kodların yüklemesini gerçekleştiremeyen applet’lerde Tip 2 sürücüleri kullanılamaz.

Java JDBC sürücüsü için geliştirici araçları bir Tip 2 sürücüsüdür.

Fonksiyonları :

Bu tip sürücü JDBC çağrımlarını veritabanı için istemci API’lerine çevirir.

Avantajları :

JDBC’yi ODBC’ye çevirimi yapmadığı için Tip 1′e göre daha iyi performan gösterir.

Dezavantajları:

1- Sağlayıcı istemci kütüphanesi istemcinin bilgisayarında yüklü olmalı.

2- Her veritabanı istemci taraflı kütüphane vermemesi.

Tip 3 ( Type 3 ) Java to Network Protocol Or All- Java Driver. : Network protokol sürücüsü olarak da bilinen Tip 3 sürücüsü, programı çağırmak ile veritabanı arasında ara katman yazılım kullanır. Bu ara katman yazılımı ( uygulama sunucusu ) JDBC çağrımlarını doğrudan veya dolaylı olarak sağlayıcıya özel veritabanı protokolüne dönüştürür. Tip 4′ten farklı olarak ara katman yazılım kullanımı protokole dönüştürme işlemini istemcinin bilgisayarında değil ara katmanda gerçekleşmesini sağlar. Ancak Tip 4 sürücüleri gibi, Tip 3 sürücüleri de tamamen Java ile yazılmıştır.

Aynı sürücü birden fazla veritabanı için kullanılabilir. Bu durum tamamıyla ara katman yazılımının desteklenmesi için yapılandırılma işleminin yapılabildiği veritabanı sayısıyla ilişkilidir. Ara katman yazılımının kullanımı platformdan bağımsızlığı sağladığı gibi güvenlik konusunda da avantaj sağlar.

Tip 3 sürücüsü JDBC API’sini sunucu tarafından daha sonra DBMS protokoline çevrilecek olan DBMS’den bağımsı net protokoline çevirir. Bu sunucu Java tabanlı tüm istemcileri farklı birçok veritabanına erişim sağlamasını yapabilir. Bu özel protokol, protokolü sağlayacısına göre kullanılır. Genellikle bu protokol en esnek JDBC API’si olur.

Sonuç olarak bu tip sürücüler sunucuya bağlanmak için bir ağ protokolü ve ara katman yazılımı kullanır. Daha sonra bu protokol DBMS’e özgü DBMS fonksiyon çağrımlarına dönüştürülür.

Tip 3 sürücüleri en esnek yapıya sahip JDBC çözümüdür. Çünkü bu tip sürücüler istemcide yerel ikili kod gerektirmeden işlemlerini gerçekleştiriyorlar. Tip 3 sürücüsü herhangi bir istemci yüklemesine gerek duymaz.

Fonksiyonları :

1- Birbirine bağlı 3 adımı izleyerek veritabanına iletişim sağlar.

2- Birden fazla veritabanıyla iletişim kurabilir.

3- Tamamıyla Java ile yazılı olan bu sürücü veritabanından bağımsız protokol kullanan arakatman yazılım sunucuyla iletişim sağlar. Bu sunucu veritabanı için veritabanının anlayacağı komutlara çevirim sağlar. Ara katman kullanımı nedeniyle veritabanından bağımsız bir yapısı vardır.

Avantajları :

1- İstemci ile ara katman sunucusu arasındaki iletişimi kullanılan veritabanına göre bir farklılık göstermez. İstemcinin bilgisarında veritabanın kütüphanesinin yüklü bulunmasına gerek yoktur. Ayrıca ara katmannın veritabanın değişmesi nedeniyle herhangi bir değişime ihtiyaç duymayacaktır.

2- Ara katman sunucusu ( J2EE uygulama sunucusuyla tasarlanmış olabilir ) tipik ara katman hizmetlerini sunar örnek vermek gerekirse ön belleğe alma ( caching ) ( bağlantılar, sorgu sonuçları (query results ) , ve bunun gibi ), yük dengelemesi ( load balancing ), kaydetme ( logging ), denetleme ( auditing )

3- İnternette istemcinin yazılıma ihtiyacı olmadan kullanılabilir.

Dezavantajları :

1- Ara katmanda, kullanılan veritabana göre kodlama gerekir.

2- Ara katmanın olması zaman performansı açısından sorun yaratabilir. Fakat bu durum verimli ara katman hizmetleri sayesinde üstesinden gelinebilir.

Tip 4 ( Type 4 )Java to Database Protocol : Yerel protokol ( Native protokol ) sürücüsü olarak bilinen Tip 4 sürücüsü, JDBC çağrımlarını kullanılan veritabanı protokollerine dönüştürür.

Tip 4 sürücüleri tamamıyla Java ile yazılmıştır bu nedenle platformdan bağımsız olarak çalışırlar. Bu tip sürücü istemcinin bilgisayarındaki Java Virtual Machine ( Java sanal makinesinde ) yüklüdür. ODBC’ye veya veritabanı API’sine çevirim yapan Tip 1′e ve Tip 2′ye nazaran daha iyi performans sergiler. Tip 1 ve 2 sürücülerinin aksine, Tip 4 sürücüsü çalışabilmesi için yazılımla beraber bulunmasına gerek yoktur.

Tip 4 sürücüsü JDBC teknolojisini doğrudan kullanılan veritabanının ağ protokolüne çevirir. Böylelikle istemcinin makinesinden veritabanı sunucusuna doğrudan çağırım yapar. Bu pratik bir çözümdür.

Tip 4 sürücülerinin hepsi Java sürücüleridir. Bu durum istemcinin herhangi bir yükleme veya yapılandırma yapmasına gerek olmadığını gösterir. Ancak, uygulamaların temelini oluşturan protokolün güvenlikte ve ağ bağlantılarında iyi olmasını sağlayamıyorsa, Tip 4 sürücüleri bu uygulamalar için uygun olmayabilir.

Java JDBC sürücüsü için IBM aracı Tip 4 JDBC sürücüsüdür.

Fonksiyonları :

1 – Tamamıyla Java ile yazılan Tip 4 sürücüleri soket bağlantısı aracılığıyla sağlayıcının veritabanına bağlanır. Geçiş katmanına veya ara katmana gerekli değil bu nedenle diğer tip sürücülere göre daha iyi performans sergiler.

2- Bu tip sürücüler JDBC çağrımlarını doğrudan istemcinin veritabanının kullandığı protokole dönüştürür. Bu nedenle istemci uygulamaları doğrudan veritabanı sunucuna erişebilir.

3- Platformdan bağımsız olmasını sağlamak için Java’da uygulanmıştır.

Avantajları :

1- Bu tip sürücülerin kullanılmasının en temel yararı Java’da yazılmasından dolayı platformdan bağımsız olmasıdır. İnternet ortamına en uygun JDBC sürücü tipidir.

2- Tip 4 sürücüleri veritabanı çağrımlarını ODBC’ye çevirmeye, yerel bir erişim arayüzüne veya çağrımlarını sunucuya aktarma gibi işlemleri uygulamadığından dolayı performansı oldukça iyidir.

3- Sunucuya ve istemcinin bilgisayarına özel bir yazılım yüklemeye gerek duymaz. Bu nedenle bu tip sürücüler dinamik olarak yüklenebilir.

Dezavantajları :

Kullanıcı her veritabanı için ayrı bir sürücüye ihtiyaç duyar.

Bu yazının devamı şeklinde olacak JDBC-2- yazımda JDBC ile bağlantı açma ve JDBC ile SQL komutları arasındaki ilişkiyi anlatmaya çalışacağım.

Yazımda Türkçe kelimeler kullanmaya özen gösterdim.Gerekli yerlerde ingilizceye karşılık gelen kısımları parantez içinde gösterdim.

Umarım sizin için faydalı bir yazı olmuştur.

İyi çalışmalar dilerim.

Bu yazı toplam 603 kere görüntülenmiştir.

0saves
Eğer yazıyı beğendiyseniz lütfen yorum bırakın veya diğer yazılardan haberdar olmak için RSS'e üye olun..

İlgili Yazılar:

Yazar Hakkında


Yazar:

Hakkında / İlgi Alanları: GNU/Linux kullanıcısı olduktan sonra açık kaynak yazılımlar kullanarak projeler üretme çabası içerisindeyim. Bu alanda emek harcıyor emek harcıyanlara da elimden geldiğince yardım etmeye çalışıyorum. Açık fikir, açık kaynak. ( open mind, open source ) :)
Kategori: Java, Veritabanları, December 3rd, 2010

Yazarlarımızdan , bu yazı dahil toplam 17 adet yazı yazmış.

Bir yanıt

  • Teşekkürler yazı için ayrıntıllı bir anlatım olmuş. ama ben hala istediğimi bulamadım =(( Struts2 ile postgresql veritabanına veri ekleme veri silme ya da güncelleme işlemleri yapmak istiyorum. Galiba sorgu yazmadan bu işlemleri gerçekleştirilebiliyormuş. POJO’ ya falan rastladım ama tam olarak anlayamadım. Mail ya da site aracılığı ile yardımcı olabilirseniz sevinirim.



Cevap yaz