JDBC Kullanarak Veri Tabanına Erişmek

JDBC (Java Database Connectivity), ODBC’den (Open Database Connectivity) farklı olarak Java ile yazılmış herhangi bir uygulamayı herhangi bir veri tabanına bağlamak için kullanılan API’ye verilen genel isimdir.

ODBC ise 1992 yılında SQL Access grup tarafından geliştirilmiş standart bir veri tabanı erişim metodudur. Uygulamaların ille de Java ile yazılmış olması gerekmez. Herhangi bir uygulamayı herhangi bir veri tabanına bağlamak için kullanılır.

JDBC ile veri tabanı detaylarını bilmeye gerek kalmadan ilgili veri tabanına bağlanılarak işlem yapılabilir. Veri tabanına bağlanabilmek için driver bilgisi gereklidir. JDBC driver’ı veri tabanı bağlantı ayarları ile yazılımcı arasında bir katman görevindedir. İstersek JDBC API’si sayesinde herhangi bir veri tabanı ile çalışabilen genel bir kod yazabiliriz.

Veri tabanı sistemleri çok geniş bir SQL syntax’ı desteklerler. Her veri tabanı aynı SQL’i kullanmaz. Örneğin bir veri tabanında yapılacak herhangi bir işlem için kullanılan SQL bir diğerinde desteklenmez. SQL için de standartlar belirlenmiştir. Artık veri tabanları kendi spesifik keyword’leri ile beraber ANSI (American National Standarts Institude) SQL-2 denilen standartlara da uymak zorundadırlar.

JDBC API’si sadece ANSI-SQL 2 standartlarını değil yazılan ve geçerli olan tüm query string’leri destekler. Bu sayede tüm veri tabanlarında çalışır.

JDBC ile veri tabanına erişerek işlem yapabilmek için yapmamız gereken birkaç iş vardır. Bunlar sırası ile;

1-  Driver bilgisi register edilmelidir. Bağlanılacak olan veri tabanının driver bilgisinin register edilmesi 2 yöntemle gerçekleşebilir.

–      Bu yöntemlerden ilki sistem özelliklerinin set edilmesi ile gerçekleşir. Komut satırından –D özelliği ile sistem özellikleri set edilebilir. Örneğin AS400 için sistem özelliklerini set edebilmek için aşağıdaki komut yazılır.

“-Djdbc.drivers = com.ibm.as400.access.AS400JDBCDriver”

–      Yöntemlerden ikinci ise Java kodu ile driver’ın register edilmesidir. Bu işlem için Java’da DriverManager isimli sınıf kullanılır. java.sql paketi altındaki bu sınıfın registerDriver() isimli metoduna parametre olarak register edilecek driver’ın instance’ı gönderilir. Örneğin yine AS400 için ;

komutu kullanılır. Aynı işlem;

komutu ile de gerçekleştirilebilir.

Driver bilgisinin veri tabanına her bağlanılması gerektiğinde tekrar tekrar register edilmesine gerek yoktur. Bu yüzden static blokları içerisine yazılması tavsiye edilir. Static bloklarına yazılan kodlar sınıf hafızaya yüklenirken bir defa çalıştırılır.

2-  Connection alınmalıdır. DBMS’in (Database Management System) 3 arayüzü implement etmesi gereklidir. Bunlardan ilki Connection interface’idir.  Connection’ın alınması yine DriverManager isimli sınıf üzerinden gerçekleştirilir. Örneğin;

komutu ile ilk parametre olarak Connection URL bilgisi, veri tabanına bağlanırken kullanılan kullanıcı adı, parola bilgileri de varsa ikinci ve üçüncü parametre olarak gönderilir. Yoksa sadece connection url bilgisi gönderilir.

3-  SQL query’si yaratmak için Statement arayüzü kullanılır. Kullanmamız gereken ikinci arayüz “Statement” interface’idir. “Statement” ya da bu interface’den türeyen ve parametrik SQL yazmamızı sağlayan “PreparedStatement” arayüzleri üzerinden sorgu çekebiliriz. Örneğin;

fonksiyonunu çağırarak ya da;

yazarak Statement objesi alınır. Bu obje üzerinden SQL sorgularımızı çalıştırabiliriz. Parametrik SQL yazılacaksa SQL içerisindeki kaçıncı soru işaretine hangi değerin verileceği bilgisini Statement’ı çalıştırmadan önce belirtmek gerekir. Bunu da setXXX() metotları ile yaparız. Veri tabanındaki kolonun tipi ne ise ona göre uygun tipteki set metotları çağrılır.

4-  SQL çalıştırıldıktan sonra veri tabanından dönen değerler ResultSet objesinde saklanır. Dolayısıyla bu objenin de implement edilmesi gerekir. Örneğin bir select işlemi yapılacaksa ve “PreparedStatement” kullanılıyorsa;

komutu ile, “Statement” kullanılıyorsa;

komutu ile sorgu çekilir.

ResultSet objesi üzerinden next() metodu ilk çağrıldığında ilk satır yani ilk kayıt döner. Sonra sırasıyla kayıt kalmayana dek tüm satırlar alınır. Döngü içerisinde kolondaki değerlere ulaşmak için, kolonlardaki veri tiplerine göre getXXX() metotları kullanılır. İçerisine parametre olarak ya kolonun adı ya da kolonun index numarası verilir. Burda index’ler 1’den başlar.

“rs.getString(“firstname”)” komutu veri tabanındaki tablonun adının firstname ve içerisindeki veri tipinin varchar olduğu durumlarda kullanılır. Bunun yerine firstname kolonunun index’i de aynı metoda parametre olarak gönderilebilir. Örneğin eğer firstname ismindeki kolon 1. kolon ise “rs.getString(1)” komutu da yine aynı değeri dönecektir.

JDBC API’sinde Connection, Statement ve ResultSet objeleri birer arayüz olarak tanımlanmıştır. Dolayısıyla içlerinde çalışan bir kod bloğu bulunmamaktadır. Bu interface’ler üzerinden çağırdığımız metotların implement edilmiş halleri bağlanılacak olan veri tabanının driver kütüphanesinde tanımlanmıştır.