Java ile uğraşılırda, MySql işin içine katılmaz
mı? Yeni nesil uygulamalarda uzun zamandır MySql kullanılmakta olan bir
veritabanı sistemi. Çoğunlukla hızlılığı ve performansı ile dikkat çekiyor.
Açıkçası bugüne kadar bu veritabanını hiç kullanmamıştım. Çoğunlukla Microsoft
Sql Server' ı veritabanı sistemi olarak kullanmaktayım. Ancak internette olsun,
yazılı kaynaklarda olsun, Java programlama dilinin yanında mutlaka MySql' e yer
verilemekte. Bu belkide bir anlamda, pazar stratejilerinin bir sonucu olsa
gerek. Nitekim mysql veritabanı sistemini java platformunda kullanabilmek için
gerekli tüm altyapılar kolayca sağlanmış. Neyse, politik davaları ve pazarlama
stratejilerini bir kenara bırakıp işimin başına dönsem daha iyi olacak sanırım.
Nede olsa bugüne bugün uygulamacıyım.
Bu hafta amacım, Java uygulamalarında, MySql
tablolarını kullanabilmekti. Tabi öncelikle bana neler gerektiğini tespit etmem
gerekiyordu. Elbette başrol oyuncusu olan MySql veritabanı sisteminin kurulması
ilk sırada yer almaktaydı. Diğer taraftan, Java uygulamalarımda MySql
tablolarına erişebilmemi sağlayacak bir veritabanı sürücü api' sinede ihtiyacım
vardı. Nitekim, java mysql' e nasıl bağlanacağını bilemezdi. Onun,
veritabanlarına bağlanmak için gösterdiği arayüzleri ve bu arayüzlerdeki gerekli
metodları yeniden yazacak bir pakete ihtiyacı vardı. Bu düşünceler eşliğinde
hemen internette kısa bir araştırma yaptım ve
http://dev.mysql.com/downloads/index.html adresine girdim. Bu adreste
MySql ile ilgili aradığım herşey mevcuttu.

MySql için 4.0 verisyonunu indirmeye başladım.
Java platformumda geliştireceğim uygulamaların MySql tablolarını
kullanabilmesini sağlayacak sürücü api' si ise, MySql Connector J 3.1 idi. Diğer
taraftan, amacım MySql üzerinde sql cümlecikleri ile uğraşmak olmadığı için,
Microsoft Sql Server' daki Enterprise Manager' a benzer bir arabirimede
ihtiyacım vardı. Araştırmamın cevabı, MySql Control Center uygulamasıydı.
Elbette MySql' i kurduktan sonra, sql ifadeleri ile tablolar oluşturabilir,
veritabanlarını yönetebilir ve daha pek çok işlemi gerçekleştirebilirdim. Ancak
hedefim, bir uygulamacı olarak şu an için tablo oluşturmak gibi işlemlere
minimum eforu harcamaktı. Asıl amaç, MySql tablolarını Java uygulamalarında
kullanabilmekti. MySql 4.0' ı yaklaşık olarak 22 megabyte' lık boyutu ile
sistemime indirdim ve kolayca kurdum. Makinemi yeniden başlattığımda, MySql için
gerekli windows servisinin otomatik olarak başlatıldığını ve WinMySqlAdmin
uygulamasının Tray' daki ikonunun yeşil ışığının yandığını gördüm. Bu sistem bir
yerlerden tanıdık geliyordu. Baş harfi Microsoft Sql Server Service Manager.

Sırada ise, Java platformum ile MySql arasındaki
iletişimi koordine edecek ve sağlayacak paketi yüklemek vardı. MySql Connector
paketini sisteme kurduktan sonra hemen yardım dosyalarını üstün körü
karıştırdım. Aslında tam olarak ne aradığımı bende kestiremiyordum. Derken
gözüme CLASSPATH ile başlayan bir paragraf takıldı. Bu paragrafta kısaca, java'
nın bu api' yi kullanabilmesi için bir takım ayarların yapılası gerektiğinden
bahsediliyordu. Yapmam gereken, ilgili jar paketinin bulunduğu klasörü CLASSPATH
tanımlamasına eklemekti. Ben paketi
D:\mysql-connector-java-3.1.3-beta\mysql-connector-java-3.1.3-beta\ adresine
yüklediğim için classpath tanımlamasınıda buna göre yapmam gerekiyordu. Yani
sadece jar paketinin olduğu klasör bilgisini Classpath tanımlamasına
ekleyecektim.

Tabi Windows XP kullandığım için bu ayarı, My
Computer' e sağ tıklayıp Properties' den Advanced kısmındaki Environment
Variables bölümünden yaptım. Böylece sistemde geliştirdiğim tüm java
uygulamaları, MySql sunucusuna bağlanmak için gerekli sürücüyü ve bu sürücünün
sağladığı üyeleri kullanabilecekti. Sıra gelmişti o heyecanlı ana. Bakalım, bir
java uygulaması içinden, MySql' e bağlanabileceğim driver' ı yükleyebilecek
miydim? WinMySqlAdmin çalışıyordu. Motorlar hazırdı. Geri sayıma başlamadan önce
bir kaç küçük koduda yazmam gerekiyordu elbette. Yoksa roket kalkamadan
patlayabilirdi.
import java.sql.DriverManager;
public class SurucuDogrula
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("SURUCU YUKLENDI...");
}
catch (Exception hata)
{
System.out.println("SURUCU YUKLENEMEDI..."+hata.getMessage());
}
}
} |
Uygulamayı derleyip çalıştırdım.

Çalışıyordu. Driver başarılı bir şekilde o an
çalışan proses için yüklenmişti. Artık daha hızlı adımlarla ilerleyebilirdim.
Nede olsa işin en önemli kısmı geride kalmıştı. Artık bana bağlanacağım bir
veritabanı ve bu veritabanında yer alacak bir tablo gerekliydi. İşte tam bu
sırada aklıma, indirdiğim MySql Control Center programı geldi. Bu programı
sisteme kurdum ve ta taaaaa. İşte aradığım arabirim. Artık MySql üzerinde
kolayca tablo oluşturabilir ve bu tabloya veriler ekleyebilirdim. MySql
kurulduğunda, başlangıç olarak Test isimli bir veritabanınıda sisteme
yüklemişti. Şimdi bu veritabanı üzerinde bir tablo oluşturacaktım. Personel
isimli bir tablo oluşturdum ve bir kaç alan girdim.

Sonra ise, oluşturduğum tabloya bir kaç satır veri
girdim. Herşey Enterprise Manager' dan o kadar tanıdık geliyorduki bu işlemleri
yapmam gerçekten çok kısa sürmüştü. Sonuç olarak artık elimde Personel isimli
bir MySql tablosu mevcuttu. Üstelik bir kaç satır verisi bilem vardı.

Şimdi Java' yı tekrardan devreye sokmanın sırası
gelmişti. İlk yapmak istediğim tabiki MySql sunucusundaki test isimli veritanına
bağlanmak ve Personel tablosundaki verileri ekrana yazdırmaktı. Bunu
gerçekleştirebilmek amacıyla uygulama kodlarımı aşağıdaki şekilde geliştirdim.
import java.sql.*;
public class SurucuDogrula
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection
conTest = DriverManager.getConnection("jdbc:mysql://localhost/test");
Statement
komut= conTest.createStatement();
ResultSet rs
= komut.executeQuery("SELECT * FROM Personel Order By ID");
while(rs.next())
{
System.out.println("ID "+rs.getString("ID"));
System.out.println("ISIM "+rs.getString("AD"));
System.out.println("SOY ISIM "+rs.getString("SOYAD"));
System.out.println("E POSTA "+rs.getString("EPOSTA"));
System.out.println("--------------------------");
}
conTest.close();
}
catch (Exception hata)
{
System.out.println("SURUCU YUKLENEMEDI..."+hata.getMessage());
}
}
} |
Uygulama kodlarında öncekilerden farklı pek bir
şey yoktu aslında. Herşeyden önce en önemli fark, veritabanı sürücüsünün MySql
için geliştirilmiş olduğu ve bu nedenlede, Connection nesnesi oluşturulurken
buna uygun bağlantı katarının girildiğiydi. Yerel sunucuda bulunan test isimli
veritabanına bir bağlantı açmak istediğimden, bağlantı ifadesi
jdbc:mysql://localhost/test şeklinde olmalıydı. Sonraki adımlarda, sadece
tablodaki verileri çekmek için kullanacağım sql sorgusunu çalıştıracak bir
Statement nesnesi oluşturmuş ve sorgu sonuçlarını bir ResultSet kümesine alarak,
bu kümedeki satırları while döngüsünde gezmiştim. Alan değerlerini
getString("Alan adı") tekniği ile alıyordum. Elbetteki döngünün, veri
kümesindeki tüm satırlarda gezmesi için next metodu kullanılıyordu. Herşey
bittikten sonrada kaynakları geri iade etmek amacıylada, bağlantı nesnesini
kapatıyordum.
Sırada satır ekleme, satır silme ve güncelleme
gibi temel işlemler vardı. Bu kez ResultSet' e ait metodlar yerine sql
cümleciklerini kullanmaya karar verdim. Statement sınıfı bu işlemler için,
executeUpdate isimli bir metod sunuyordu. Bu metod ile, tablo üzerinde yapılacak
güncellemeler, satır ekleme işlemleri ve satır silme işlemleri
gerçekleştirilebilmekteydi. Tabloya satır girilmesi ile işleme başladım. Bunun
için, try bloğu içerisine aşağıdaki kod satırlarını ekledim.
System.out.println("--------------------------");
int eklenen=komut.executeUpdate("INSERT INTO Personel (AD,SOYAD,EPOSTA)
VALUES
('Deneme','Deneme','Posta1@posta.com')");
System.out.println(eklenen+" SATIR EKLENDI..."); |
İşin tek esprisi, sql cümleciğinin, Statement
sınıfının executeUpdate metodu ile çalıştırılmasıydı. Bu metodun geri dönüş
değeri ise int tipindendi ve işlem sonucu etkilenen satır sayısını vermekteydi.
Uygulamayı tekrardan derleyip çalıştırdığımda başarılı bir şekilde satırın
Personel tablosuna eklenmiş olduğunu gördüm.

Sırada güncelleme işlemi vardı. Tek yapmam gereken
sql cümleciğini uygun şekilde değiştirmekti. Burada, Personel tablosundaki tüm
satırların EPOSTA alanlarının değerlerini değişitiriyordum. Komutun çalışması
sonucu bu işlemden etkilenen satır sayısı ise, executeUpdate metodunun sonucu
olarak ortama aktarılmaktaydı.
System.out.println("--------------------------");
int eklenen=komut.executeUpdate("UPDATE Personel SET
EPOSTA='admin@admin.com'");
System.out.println(eklenen+" SATIR GUNCELLENDI..."); |
Silme işlemi de extra bir efor gerektirmemekteydi.
Sql diline biraz olsun aşina olduğum için kodda ne tür değişiklik yapmam
gerektiğini biliyordum. Burada örnek olarak ID alanı 4 olan satırı tablodan
çıkartıyordum.
System.out.println("--------------------------");
int eklenen=komut.executeUpdate("DELETE From Personel WHERE ID=4");
System.out.println(eklenen+" SATIR SILINDI..."); |
Tüm bu işlemler elbetteki MySql sunucusunda yer
alan, Personel tablosunu doğrudan etkilemekteydi. Artık MySql sunucusuna ait
tablolarıda kullanabilmekteydim. Veritabanları ile ilgili konular tabikide çok
geniş ve kapsamlı. Bu konu ile ilgili olarak yazılmış binlerce sayfalık kitaplar
olduğunu, bu kitapları gördüğümü ve onlara korku dolu bakışlarla baktığımı
söylemek isterim. Ancak temel olarak yapabileceklerimi bilmek bile son derece
güzel. Hiç olmassa şimdilik başımın çaresine bakabilirim. Bakalım kahve
kokusunun zihnimde oluşturduğu görüntüler, beni başka hangi konulara
sürükleyecek.
Burak Selim ŞENYURT
selim@bsenyurt.com