Önsöz

12 Temmuz 2007



ÖNSÖZ

Server-client mimarisine sahip programların birisi de Java Programlama diline ait veri tabanı uygulamaları JDBC’dir.1980 yılı ve sonrası, Internet ve ağ uygulamaların da Java ve Java uygulamaları büyük gelişme göstermiştir.JDBC veri tabanına bağlanmakta kullanılan arayüzdür.

Bu tezin hazırlanmasındaki amaç, JDBC konusunda örnek vermenin yanında, JDBC nin çalışma mantığını anlatmak ve konuyla ilgili ortaya çıkan kaynak sıkıntısı biraz osun azaltabilmektirs.

Gerek ders konusunda, gerekse sosyal hayatta bizlerden yardımını esirgemeyen değerli hocam Zafer DİNǒe sonsuz teşekkürlerimi sunarım.

ÖZET

Java programlama dilinde veri tabanına bağlantı için JDBODBC ara yüzü kullanılır. Temel mantık ana server-client mimarisinde server üzerinde bağlantı nesnelerinin oluşturulup, veri tabanında kayıtlara ulaşılması ve istenen değişikliklerin yapılmasıdır.

JDBC, ilişkisel veri tabanlarına ara yüz olarak tanımlanabilir. Java Veri tabanı bağlantısı (JDBC) sınıfları SQL cümlelerini çalıştırarak ilişkisel veri tabanlarına erişimi ve bu veriler üzerinde işlem yapmayı sağlar.

JDBC ile veri tabanı bağlantısını sağlamak için server üzerinde bağlantı nesnesi oluşturulur, JDBC sürücüleri yüklenir, SQL cümleleri ile veri tabanı üzerinde istenen değişiklikler yapılır ve bağlantı kapatılır.

BÖLÜM 1

GİRİŞ:

Bilişim teknolojilerinin gelişim hızı son 15 yılda inanılmaz bir ivme kazanmıştır. Bu gelişimde bilişim sistemleri kuruluşlarının başarılarının büyük payı vardır. Ancak bu gelişimle birlikte bu kurumlarının istek ve ihtiyaçları da değişmiştir, artık bilişim dünyası ana bilgisayardan (Mainframe) istemci_sunucu mimarisine geçiş gibi köklü bir değişiklik yaşamaktadır. Bu gün artık ihtiyaçlar veri tabanları, işletim sistemleri, bilgisayar ağları gibi varolan teknolojilerle uyumlu çalışabilecek ve aynı zamanda yeni teknolojilerin kullanılmasına olanak verebilecek mimarilerin geliştirilmesine yol açmıştır.

Bilişim teknolojilerinde ana bilgisayar tabanlı uygulamaların sakıncalarında dolayı ilişkisel veri tabanları ve istemci/sunucu modeline geçilmiştir. Bilindiği gibi ana bilgisayar tabanlı uygulamalarda depolanan bilginin paylaştırılması büyük bir sorun olmaktaydı ve bu yöntem verimsizdi. Geliştirilen istemci/sunucu modelinde, uygulamalar istemci ve sunucu tarafında iki ayrı tek parçalı uygulama modelinin çıkmasına yol açmıştır. Ancak bu modelde, uygulamalarda değişiklik ya da geliştirmeler yapılmasını kolaylaştıran “kodun yeniden kullanılabilmesi özelliği” özelliğinin uygulanması, çoğu zaman ayrı ayrı ele alınması gereken bir çok program modülünün ortaya çıkmasına sebep olarak işlemi güçleştirir.

İşte yukarıda sayılan bu sebeplerden dolayı, dağıtık bilgi işlem modeli,CORBA ve IIOP’ nin geliştirilmesini sağlamıştır. 1980 yılında standart olarak kabul edilen bu teknolojide zamanla ortaya çıkan bir sorun, birbirlerinden kesin olarak çizilmiş sınırlarla ayrılmış ara yüzlerle etkileşim içerisinde olan ve tekrar kullanılabilen küçük yazılımlar modülü, nesneye yönelik programlama yaklaşımı ile çözülmüştür.

Dağıtık bilgi işleme modeli, farklı bilgisayar ağları ve farklı işletim sistemlerinde çalışabilir. Farklı programlama dillerinde yazılmış olan uygulamalar birbirleriyle sorunsuz olarak çalışabilmektedir.

İşte burada asıl konumuz olan Java veri tabanı uygulamaları geliştirme ara yüzü olan JDBC ortaya çıkmıştır. Birbirinden bağımsız olarak geliştirilmiş CORBA(Common Object Request Broker) ve Java dili yukarıda sayılan güçlüklerin aşılmasını sağlamıştır. Java farklı işletim sistemleri ve ağlar üzerinde sorunsuz çalışmasını, ortamdan bağımsız olması yani, diğer programlama dilleri gibi işletim yada donanım üzerinde çalışmak yerine, Java Sanal Makinesi (Java Virtual Machine JVM) adı verilen bir teknolojiyle sağlamıştır.

AMAÇ

Bu çalışmada Java programlama dili kullanılarak ağ ortamında çalışabilecek veri tabanı uygulamaları geliştirilmesi amaçlanmaktadır. Bu yüzden öncelikle veri tabanı uygulamaları geliştirebilecek yeterliliği sahip olmak için Java proglama dili veri tipleri, sınıf yapısı ve sınıf oluşturma, uygulamaların görsel olması için grafik kütüphanesi ve grafik uygulamaları, en son olarak da veri tabanı uygulamaları anlatılmıştır. Uygulamaların çalıştırılmasında herhangi bir Web Browser ‘a (Web tarayıcısı) bağlı kalmadan Java ile birlikte hazır olarak gelen Appletviewer kullanılmıştır.

BÖLÜM 2

2.1 JAVA NEDİR?

JavaTM platformu güçlü ağ uygulamaları için geliştirilmiş ve değişik bilgisayarlarda çalışabilen bir programlama dilidir.

,JavaTM teknolojisi ile aynı uygulamaları bir kişisel bilgisayar, Macintosh bilgisayarda, ağ bilgisayarında ve görüntülü Internet telefonu gibi bir çok yeni teknolojide kullanabilirsiniz. (www.java .sun.com)

2.2 JAVA PROGRAMLAMA DİLİNİN ÖZELLİKLERİ

2.2.1 Her ortamda çalışabilir

Java teknolojisinin en önemli özelliği her ortamda, en küçük bilgisayarlardan super bilgisayarlara kadar, çalışabilmesidir. Java teknolojisi bileşenleri nasıl bir bilgisayar, telefon, televizyon, veya işletim sistemi olduğuna bakmaksızın Java platformunu destekleyen her türlü ortamda çalışır. Java teknolojisinin yaratılış amacı daha önce hiç kolay olmadığı kadar kolay bir şekilde bilgisayar ve diğer iletişim araçları arasında etkileşim kurmaktır. Java ilk ortaya çıktığında asıl amacı elektronik ev aletlerinin birbirleriyle iletişim kurabilmesini sağlamaktır. Java hızlı bir şekilde gelişerek bu gün ki halini almıştır.

2.2.2 Basit

Java ile program hazırlamak oldukça kolay ve zevklidir. Daha önce bir programlama dili ile çalışmış veya en az bir nesneye programlama dili ile çalışmak yeterlidir. Ayrıca Java programlama dilinin C++ programlama diline olan benzerliği sebebiyle C++ programlama dili çalışmış olanlar için çok zevkli yeni bir deneyim olacaktır.

2.2.3Object – Oriented

Giriş bölümünde bahsedildiği gibi nesneye dayalı bir programlama dilidir. İleri ki bölümlerde anlatılacağı gibi sınıf ve nesne yapılarıyla daha kolay, defalarca kullanılabilen modüller yaratılabilir.

2.2.4 Güvenli

Java programlama dili hazırlanan programlar bugün güveliğin çok önemli üst düzey devlet kuruluşlarında ve NASA da kullanılmaktadır. Java ile hazırlanan programlara virüslere ve hackerlara karşı geliştirilen en güvenli programlar olarak düşünülmektedir.

2.2.5 Yüksek Performans

Java ile hazırlanan programlar hızlı çalışmaları ve bilgisayara az yük getirmeleri nedeniyle İnternet ve intranet uygulamalarında tercih edilmektedir.

2.2.6 Server Üzerine Az Yük

Java diğer Web tabanlı programlama dillerine göre bilgisayara daha az yük getirmektedir.

2.3 JAVA VE CGI KARŞILAŞTIRMASI

2.3.1 İnteraktif Standartların Savaşı :CGI ve JAVA

İnternet üzerinde veri işlemeye yönelik bir çok standart vardır. Bunlardan biride CGI (Commom Gateway Interface) ‘dır. CGI global değişkenler ve dosyaları kullanmak gibi programlama dili özelliklerini kullanarak istemci ve ana bilgisayar arasında veri değişimi sağlayan başarılı bir standarttır.

CGI standardı basit çözümü olan uygulamalarda kullanılır. Örneğin; “Ben sana adımı ve e-mail adresimi göndereceğim, sen bu bilgiyi al,sakla ve bana bu bilgileri aldığını bildir” tarzında uygulamalar için kullanılır. Bu seviyenin üzerindeki uygulamalar ise Java programlama dilinin yeteneklerine ihtiyaç duyarlar. Örneğin İnternet üzerinde kullanılan bir satranç oyunu. Kullanıcıların her hamlesinde CGI standardı yeni istek ve cevap nesnesi oluşturması gerekirken Java programlama dili bunu oyunu girişte kullanıldığı tek bir applet ile sağlamaktadır.

Java programlama dili ile CGI standardı arasındaki diğer önemli fark ise CGI ‘ın ortama bağımlı olmasıdır. Yani CGI scriptlerinin istemci bilgisayarda çalışması için uygun bir işletim sisteminin ana bilgisayardaki scripti destekler olması gerekmektedir. Halbuki Java uygulamaları ‘Java-awere’ destekleyen herhangi bir browser da sistemden bağımsız olarak çalışabilmektedir.(Manger,1988)

2.4 JAVA PROGRAMLAMA DİLİYLE İLGİLİ SIKÇA SORULAN SORULAR

2.4.1 Programla ilgili sorular

2.4.1.1 Niçin Java ismi?

Neden Java olmasın? Java ismi Web de insanların aklında hemen yerleşebilecek bir kelimenin arandığı beyin fırtınasında ortaya çıkmıştır. İlk olarak HotJava ve Java isimleri akla gelmiştir. Daha Java ile ilgili her programa kahve isimleri verilmiştir. Bu yüzden ki Java’nın sembolü kahvedir.

2.4.1.2 Java platformuna nasıl ulaşabilirsiniz?

Eğer İnternet ulaşabiliyorsanız muhtemelen Java ya da ulaşabilirsiniz. Java Web tarayıcılarıyla uyumludur.

Bunun yanında Java platformu yeni nesil her türlü telefon, internete bağlanabilen televizyon, akıllı kartlar ve diğer internet cihazlarıyla uyumlu olarak çalışabilmektedir.

2.4.2 JDK ( Derleyici ) ile ilgili sıkça sorulan sorular:

2.4.2.1 Tam olarak JDK nedir?

Jdk (Java geliştirme kiti), Java dilinde yazılan programları geliştirme araçlarını içinde barındıran bir programdır. Java derleyicisi ( Java.exe), Java yorumlayıcısı (Javac.exe ) ve appletleri test etmemizi sağlayan (Appletviewer.exe) içermektedir.

2.4.2.2 Applet derleyicisi olan Javac.exe’ yi nasıl kullanabilirim?

Çalıştırmak istediğiniz applet adı ve uygulama adı ile kullanılarak programlarımızı derleyebiliriz. Javac.exe ile hem Appletviewer hem de Netscape 2.0 da çalışabilecek bir class dosyası yaratılır.

Javac Murat.java

Javac.exe Ms-dos komut isteminde ad vererek veya Windows ortamında çalışabilir.

2.4.2.3 Java yorumlayıcısı olan Java.exe’yi nasıl kullanabilirim?

Bu uygulama yalnızca Java uygulamalarında kullanılabilir, Java appletlerinde kullanılamaz. Java yorumlayıcısı dosyanın derlenmesinden sonra oluşan .class dosyası ile kullanılır. Dikkat dosya adından sonra .class yazılmaz. Örneğin Murat.java dosyasının derlenmesinden sonra oluşan Murat.class dosyasını yorumlamak için

Java Murat komut satırı yeterli olacaktır.

Javac.exe Ms-dos komut isteminde ad vererek veya Windows ortamında çalışabilir.

2.4.2.3 Java uygulamalarını Appletviewer ile görüntüleyebilir miyim?

Hayır , çünkü Java uygulaması static void main (args [0] ) metodu ile program kod satırları başlatılır. Bir applet ise main uygulama bloğu ile başlar.

2.4.2.4 Java Applet ve Java uygulamaları arasındaki fark nedir?

Applet, Netscape 2.0 web browser’ ı ile kullanılabilen çalıştırılabilir dosyalardır. Java uygulamaları benzer olmasına rağmen, browser gibi, Dos kabuğunda tek başına çalışan uygulamalarla çalıştırılabileceği gibi Java yorumlayıcısı ile de çalışabilir. Appletler çalıştırılabilmesi için Netscape 2.0 gibi web browser ‘ına ihtiyaç duymalarına rağmen, uygulamalar Java.exe yorumlatıcısıyla çalışabilir. Appletler bunu yanın da Appletviewer gibi araçlar ile de çalıştırılabilir.

2.4.2.5 Awt nedir?

Awt, Java uygulamalarında ve Java appletlerinde grafik uygulamalarını gerçekleştirmek için kullanılan bir araçtır. Awt bileşenleri denilince butonlar, pencereler, checkbox lar , pull-down mönüler akla gelmelidir.

2.4.2.6 Java programlarıma kullanıcı bilgilerini nasıl iletebilirim?

Java appletlerinde Awt uygulamalarını (text kutusu) kullanarak bunu gerçekleştirebiliriz. Böylece kullanıcı giriş bilgileri programımıza aktarılmış olur. Awt kullanmadan bunu gerçekleştirmek için klavyeden giriş bilgilerini okuyan read( ) komutunu kullanabiliriz.

2.4.2.7 Applet ve uygulamalarına kullanıcı tanımlı parametreler nasıl aktarılır?

Appletler
tag ını kullanarak değerleri alabilirler. Applet ‘in getParameter ( “ad”) parametre nesnesini kullanarak, ad adlı değeri applet ‘e alırlar. HTML dosyaları .. tagları arasında applete değer gönderirler. (Manger,1988)

BÖLÜM 3

SINIF VE NESNELER

Nesneye dayalı programcılık son yıllarda çok büyük gelişme gerçekleştirmiştir. Bu konunun anlaşılması belki de seneler alabilir. Bilinmesi gereken bazı noktalar;

Sınıf ve nesne kavramı ve bunların birbirleriyle ilişkisi,

Sınıf ve nesnelerin davranışları ve bunlara ait sınıflar,

Sınıfa ait miras ve program dizaynı üzerine etkisi,

Paket ve ara yüz kavramlarına ait temel bilgiler.

Nesneye dayalı programlama birbiriyle uyumlu bağımsız modüllerden oluşan yapı anlamına gelir.

Sınıf ve diğer sınıf kavramlarının anlatılmasından önce standart kavramlarının Türkçe karşılıklarının verilmesi yararlı olacaktır.

Class (sınıf): Ana nesne kökenli programlama elemanı.

Object (nesne): Sınıf (Class) yapıları bilgisayar belleğinde bir işlem için kullanıldığında aldıkları (özel) isim.

New :Sınıfların kurucu metodunu çağırıp nesne tanımını ve bilgisayar adreslerini oluşturan deyim

Method (metot): Sınıfların içindeki işlevsel program parçacıkları.

Constructor (kurucu metot): Nesne ilk defa oluşturulurken hangi sınıf değişkenlerinin hangi değerleri alacağını belirten metot.

3.1 Sınıflar ve Nesneler

Sınıf benzer özellikteki nesnelerin oluşturduğu yapıya verilen addır. Nesne denince de gerçek dünyada olduğu gibi diğer nesnelerden oluşan yapılar akla gelebilir.

Nesneye dayalı programlamada nesne değil nesnenin ait olduğu sınıf özellikleri göz önünde tutulur. Aynı bilgisayarlar da olduğu bilgisayar işlemci hızı ve ana bellek kapasitesi göz önüne alınmaz, bilgisayar deyince bilgisayar sınıfının özellikleri belirtilir. Her bilgisayar da bulunan monitör, klavye, mouse bilgisayar sınıfının özellikleridir.

Sınıf örneği, güncel nesne için kullanılan bir başka deyimdir. Sınıf nesne için kullanılan genel terim ise; örnek, seçilmiş bir nesneyi belirten terimdir.

Sınıf örneği ve nesne deyince aynı şey akla gelmelidir. Bir buton sınıfı ele alalım. Programcının yapması gereken programın gereği buton özelliklerini ( buton rengi, şekli vb.) belirlemek ve butona ihtiyacı olduğunda bu sınıfı çağırmaktır. Sınıf deyince C+ programlama dilindeki struct ve typedef tanımlamaları akla gelebilir, ama unutulmamalıdır ki sınıf bunun çok ilerisindedir.

3.1.1 Davranış ve sınıflar

Java da oluşturulan her sınıf iki özellikten oluşur;

1. Sıfat,

2. Davranış.

Sıfatlar

Sıfatlar nesneleri birbirinden ayırmamızı sağlayan özelliklerdir. Bilgisayar örneğimize devam edelim.

İşlemci hızı:Pentium 166 Mhz, Pentium 350 Mhz, Pentium 1000 Mhz

Marka: Escort, Vestel, Toplama bilgisayar

Ana bellek: 16 MB Edo Ram, 64 MB Sd Ram, 256 MB Sd Ram

Sıfatlar durumla ilgili bilgi de verebilir. Örneğin bilgisayarın çalışıp çalışmadığı durumu da bir sıfat.

Sıfatlar için değişkenler tanımlanır. Sıfatlar nesneye ait global değişkenler olarak da tanımlanabilir. Sıfatlar her örnekte değişiklik gösterebildiği için örnek değişkenleri veya örneğe ait değişkenler olarak ta tanımlanabilir. ( Çoban,2000)

3.1.1.1 Davranış

Sınıf davranışları, sınıfa ait hangi örneklerin durumunun ne şekilde değiştirebileceklerini gösterir. Bilgisayar örneğimize devam edersek şu davranışlar örnek verilebilir.

Bilgisayarı çalıştır

Bilgisayarı durdur.

Bilgisayarı düşük güce geçir.

3.1.1.2 Sınıf oluşturulması

Eğer herhangi bir editörde şu örneği yazarsak

class Bilgisayar{

String marka;

Int hız;

Boolean bildurumu;

Böylece Bilgisayar sınıfı oluştrulmuş olur. Bu sınıfa ait özellikler string tipinde marka, int tipinde hız, mantıksal değişkenler (true, false) bildurumu tanımlanmıştır.

void bilcalistir( ){

if (bildurumu= =true)

System.out.println(“Bilgisayar çalışıyor”);

else{

bildurumu=true;

System.out.println(“Bilgisayar şimdi çalıştırldı”);

Yazdığımız program parçası bilgisayarın çalışıp çalışmadığı kontrol ediliyor. Eğer çalışıyorsa “Bilgisayar çalışıyor” mesajı veriliyor, aksi durumda bilgisayar durumu değişkeni true yapılarak bilgisayar çalıştırılıp, “Bilgisayar şimdi çalıştırıldı” mesajı verdiriliyor.

void ozelliklerebak( ){

System.out.println(“Bu bilgisayar” + marka + ” “ +hız);

if (bildurumu= = true)

System.out.println(“Çlışyor”) ;

else System.out.println(“Duruyor”);

Yukarıdaki program parçası bilgisayarın markasını, hızını ve çalışıp çalışmadığını gösterir. Bu program yazılıp Javac Bilgisayar.java komutu ile derlendiğinde tanımladığımız sınıf bir ana programdan çalışmadığı için ;

In class Bilgisayar: void main( String argv ( J ) is not defined hatası verir.

Bu yüzden önce Bilgisayar sınıfını kullanan bir program yazmamız gerekir.

class Bilgisayar{

String marka;

int hiz;

boolean bildurumu;

void bilcalistir( ){

if (bildurumu==true)

System.out.println(”Bilgisayar ?alisiyor”);

else{

bildurumu=true;

System.out.println(”Bilgisayar simdi €alistirildi”);

void ozelliklerebak(){

System.out.println(”Bu bilgisayar” + marka + ” ” +hiz);

if (bildurumu==true)

System.out.println(”Çalisiyor”) ;

else System.out.println(”Duruyor”);

public static void main(String args[]){

Bilgisayar m=new Bilgisayar();

m.marka=”Vestel”;

m.hiz=667;

System.out.println(”™zelliklere bak”);

m.ozelliklerebak();

System.out.println(”___________”);

System.out.println(”Bilgisayar çalistiriliyor”);

m.bilcalistir();

System.out.println(”___________”);

System.out.println(”™zellikler bak”);

m.ozelliklerebak();

System.out.println(”___________”);

System.out.println(”Bilgisayar çalistiriliyor”);

m.bilcalistir();

}}

Şekil 1

Programdaki void kısmında m=new Bilgisayar( ) ile Bilgisayar sınıfı özelliklerine sahip m adlı bir değişken tanımlanmış olur.

3.2 Miras Ara yüz ve Paket kavramları

Miras ile anlatılmak istenen yeni bir sınıf oluşturulduğunda diğer sınıflardan farkının belirtilmesidir. Her sınıfa ait bu sınıfın özelliklerini taşır.

Bir sınıfın daha üstünde bulunan sınıfa o sınıfın süper sınıfı, altında bulunana ise alt sınıf denir. Alt sınıflar üstünde bulunan sınıfın özelliklerini taşır, bu yüzden süper sınıfın değişkenlerini alt sınıfta yeniden tanımlamaya gerek yoktur. Çoğu kez bir sınıf oluşturmak için varolan diğer sınıfların özelliklerine yenilerini eklemeye gidilir. Yapacağımız işe uydun buton sınıfını tanımlamaka için varolan buton sınıfından yaralanılır. Buton sınıfına yeni özellikler eklenerek yeni bir buton sınıfı oluşturulabilir.

Eğer yeni bir sınıf bir sınıf oluşturmak istersek, tıpkı Bilgisayar sınıfında olduğu gibi, var olan bir sınıftan yararlanacağımız için Java bu sınıfı nesne altındaki bir sınıf olarak kabul eder.

3.2.1 Sınıf hiyerarşisi:

Yeni bir sınıf oluşturulurken yapılacak en mantıklı şey sınıf hiyerarşisini kontrol etmektir. Bu da sınıfın hangi sınıfların alt sınıfları olabileceği ve bunun bize ne avantaj sağlayacağıdır.

Sağlanabilecek en önemli avantajlar:

Yukarıdaki sınıflara ait bilgileri alt sınıflarda istenildiği kadar kullanabilmek.

Bir sınıfın hiyerarşi içindeki yerini değiştirerek yeniden derlemeye gerek kalmadan davranışını değiştirebilmektir.

Bilgisayar sınıfına bir alt sınıf oluşturmak istediğimizde bir laptop bilgisayar uygun olabilir. Her şeyden önce her ikisi de bilgisayardır. İkisinin de benzer özellikleri (marka, hız) vardır. Ancak bir çamaşır makinesinin bilgisayar sınıfının alt sınıfı olmasıyla bize ne yarar sağlayacağı konusu üzerinde fazla düşünmeye gerek yoktur.

Şekil 2

3.2.2 Alt sınıf oluşturma

Alt sınıfların en çok kullanıldığı Java programları Java Appletlerdir. Bu sayede Applet sayfa içinde istenen yere kolaylıkla yerleştirilebildiği gibi sistemle etkileşimi de kolaylıkla sağlanabilir.

Örnek olarak kendimizi tanıtan bir applet oluşturalım.

public class Murat extends java.applet.Applet{

bu komut satırıyla applet sınıfın alt sınıfı olan Murat adında bir alt sınıf oluşturduk. Komut satırındaki bir diğer önemli nokta ise public kelimesidir. Public kelimesi bu sınıfın diğer sınıflar tarafında kullanılabileceği anlamına gelmektedir. Applet özellikleri gereği public tanımlanmak zorundadır.

} imlecinden sonra

Font yeni = new Font(“Time Roman”, Font.BOLD,50);

Komut satırını eklemek ile java.awt sınıfına sahip Font fonksiyonu ile 50 puntoda, Times New Roman stilinde, Bold olan yeni adlı bir nesne tanımlamış olduk.

Diğer metot da painttir. Bu metot tek başına bir şey yapmamasına rağmen applet sınıfı içinde kullanarak yazılan metinin rengi vb. özelliklerinin belirlenmesinde kullanılır.

public void paint( Graphic g){

g.setFont (yeni);

g.setColor(Color, red);

g.drawString(“Merhaba ben Murat Çatmalı”,5,25);

Paint( ) sınıfı global olarak tanımlanmıştır. Bu komut satırlarıyla yapılan;

Graphics nesnesine fontlar için erişeceği yer belirtilmiştir.

Graphics nesnesine kullanacağı renk belirtilmiştir.

Merhaba ben Murat Çatmalı yazısı 5 satır, 25. Sütuna yazdırılmıştır.

public class Murat extends java.applet.Applet{

Font yeni = new Font(“Time Roman”, Font.BOLD,50);

public void paint( Graphic g){

g.setFont (yeni);

g.setColor(Color, red);

g.drawString(“Merhaba ben Murat Çatmalı”,5,25);

appletimizi bu şekilde yazıp derlediğimizde bir hata ile karşılaşırız.

Şekil 3

MuratApplet.java: 7:Class Graphic not found in type declaration.

Bu hatanın sebebi kullanılan sınıfların tanımlanmamasıdır. Default olarak sadece java.lang paketi program tarafından içerilir.

Bizim ise örneğimizde üç sınıfımız vardır: Graphics, Font ve Renk.

Programımızın en son hali:

import java.awt.Graphics;

import java.awt.Font;

import java.awt.Color;

public class Murat extends java.applet.Applet{

Font yeni=new Font(”TimesRoman”,Font.BOLD,36);

public void paint(Graphics g){

g.setFont(yeni);

g.setColor(Color.red);

g.drawString(”Merhaba ben Murat €atmali”,5,25);

Şekil 4

3.3 Kurucu (Costructor) Metot ve New( ) deyimi

Konumuzu bir örnek üzerinde anlatmaya çalışalım. Bu örneğimizde kisitesti adlı bir sınıf tanımlayalım. kisitesti sınıfında ad ve soyad adlı değişkenleri tanımlayalım.

import java.io.*;

class kisitesti

String ad;

String soyad;

class kisi

public static void main(String args[])

kisitesti benim=new kisitesti();

benim.ad=”Murat”;

benim.soyad=”Catmali”;

System.out.println(”Benim adim: “+benim.ad);

System.out.println(”Benim soyadim: “+benim.soyad);

} Şekil 5

Bu programda kisitesti sınıfında tanımlanan ad ve soyad değişkenlerine ilk değer atamak yerinde iki defa çağrıldığını düşünelim. Bu kadar kısa bir program kısa bir program bile gereksiz yere çok uzayacaktır. Bu iş için Java programlama dilinde kurucu sınıfı kullanılmıştır. Bu metot diğer metotlardan biraz farklıdır. Önce metot önüne metot değişken türü gelmez ve metot dışında hiçbir değişken göndermezler. İsimleri de her zaman sınıf ismiyle aynı olur. Şimdi aynı örneği kurucu metodu kullanarak yapalım.

import java.io.*;

class kisitesti

String ad;

String soyad;

kisitesti(String a,String b)

ad=a;

soyad=b;

class kisi1

public static void main(String args[])

kisitesti benim=new kisitesti(”Murat”,”Catmali”);

System.out.println(”Benim adim: “+benim.ad);

System.out.println(”Benim soyadim: “+benim.soyad);

Şekil 6

3.3.1 This deyiminin kullanımı

Bir metodun ait olduğu sınıftan yaratılacak nesneyi veya o nesnenin bir alt değişkenini tanımlamak gerekir. Nesne daha tanımlanmadığından direk olarak nesne ismini kullanamayız. Bunun yerine Java this deyimini kullanılır. this deyimi özellikle sınıfa ait değişken isimlerinin aynısı metotta kullanılmışsa işe yarar. Bu durumda değişkenler this.değişken_adı komutu çağırabilir.

import java.awt.Graphics;

import java.applet.Applet;

public class deyim extends Applet

//bu degiskeler tum sinifa aittir

double x;

int y;

void metot1(Graphics g)//metota hi‡bir degisken girmiyor

double x;

int y;

x=5.5;

y=4;

//tum sinifa ait degiskenler this kelimesi ile birlikte kullanlabilir

g.drawString(”metot 1 in dis degiskenleri this ile ulasimi:x=”+this.x+”y=”+this.y,25,25);

g.drawString(”metot 1 in ic degiskenleri:x=”+x+”y=”+y,25,40);

public void paint(Graphics g)

{x=2.5;y=3;

metot1(g);}}

BÖLÜM 4

SEQUENTITIAL (ARDAŞIK) DOSYALAR

Bu dosyalarda veriler arka arkaya okunan byte blokları olarak kabul edilir. Her dosya dosya-bitiş işaretiyle sonlandırılır. Yeni bir dosya açıldığında bu dosyayı temsil eden bir nesne oluşturulur.

Dosya sınıfı, giriş çıkış işlemlerini sağlamanın yanı sıra dosya isimleri ve bulundukları dizinlerle ilgili bilgi verir. Kurucu metodları bir örnekte açıklamaya çalışalım.

( Çoban,2000)

import java.io.*;

class dosyaTesti

public static void main(String args[])

(1) File dosya=new File(”buton.java”);

(2) System.out.println(”Dosya ismi:”+dosya.getName());

(3) System.out.println(”Dizin ismi:”+dosya.getPath());

(4) System.out.println(”Mutlak dizin ismi:”+dosya.getAbsolutePath());

(5) System.out.println(”šst dizin ismi:”+dosya.getParent());

(6) System.out.println(dosya.exists()? “Mevcut”:”Mevcut degil”);

(7) System.out.println(dosya.canWrite()? “Yazilabilir”:”Yazilamaz”);

(8) System.out.println(dosya.canRead()? “Okunabilir”:”Okunamaz”);

(9) System.out.println(dosya.isDirectory()? “Dizin”:”Dizin degil”);

(10) System.out.println(dosya.isFile()? “Dosya”:”Dosya degil”);

(11) System.out.println(dosya.isAbsolute()? “Mutlak dizin ismi”:”Mutlak dizin ismi degil”);

(12) System.out.println(”Son değişiklik tarihi:”+dosya.lastModified());

(13) System.out.println(”Dosya boyutu:”+dosya.length()+” byte”);

Şekil 7

1.File değişken adı : Dosya sınıfında yeni bir dosya tanımlamak için kullanılır. dosya adında bir değişkene tanımlanmış, buton.java dosyası bu değişkene atanmıştır.

2. getName( ): Dosyanın ismini verir.

3. getPath( ): Dosyanın ismini ve içinde bulunduğu dizinin ismini verir.

4.getAbsolutePath( ):Dosyanın tam dizinini ve dosya ismini verir.

5. getParent( ):Dosyanın içinde bulunduğu dizinin ismini verir.

6. exists( ): Dosyanın mevcut olup olmadığını kontrol eder.

7. canWrite( ): Tanımlanan dosyaya bilgi yazılabildiğini kontrol eder.

8. canRead( ): Tanımlanan dosyadan bilgi olunabildiğini kontrol eder.

9. isDirectory( ): Verile ismin bir dizin olup olmadığını kontrol eder.

10. isFile( ): Verilen ismin bir dosya olup olmadığını kontrol eder.

11. isAbsolute( ): Dosya isminin mutlak isim olup olmadığını kontrol eder. ( Eğer dosya ismi co/java/prog/Buton.java olarak verilmişse true değeri döndürür.)

12. lastModified( ): Dosyanın en son değiştirildiği tarihi verir.

13.length( ): Dosyanın boyutunu Byte olarak verir.

Bunun yanı sıra kullanılan diğer dosya fonksiyonları:

delete( ): Dosya siler.

equals(nesne): nesne de verilen dosya adıyla, dosya ismini karşılaştırır.

list( ): Verilen dizinin içindeki dosyaların listesini verir.

mkdir( ): Yeni bir dizin oluşturur.

mkdirs( ): o anda tanımlı olan dizin içinde bir alt dizin olşturur.

renameTo( dosya) : Dosyanın ismini değiştirir.

toString( ): Dosya ve dizin topluğunun String değişkeni içerisindeki eşdeğerini verir.

Bir girdi-çıktı akış nesnesi (dosya) ouşturmak istediğimizde FileInputStream veya FileOutputStream sınıfında bir nesne oluştururuz. Eğer değişkenleri byte byte yerine Double veya Integer veri tipinde okumak istersek DataInputStream veya DataOutputStream nesnelerini kullanmamız gerekir. Aşağıdaki Java programı sequential tipte bir dosya yaratır.

(1)Giriş-çıkış ve grafik fonksiyonların içeren kütüphaneler programa dahil ediliyor.

(2) dosyayarat adlı bir sınıf tanımlanıyor.

(3) hisim, ,isim, soyisim, hesap adlı metin kutuları tanımlanıyor.

(4) enter,done adlı butonları tanımlanıyor.

(5) io sınıfı nesnelerinden DataOutputStream ile dosyamıza veri yazılmasında kullanılacak nesne tanımlanıyor ve adı cikti veriliyor.

(6) H,I,S,P adlı etiketler tanımlanıyor.

(7) dosyayarat adlı tanımladığımız fonksiyon kodları yazılmaya başlanıyor.

(8) (”Musteri dosyasi Ac”) başlıklı bir üst sınıf tanımlanıyor.

(9) musteri.txt adlı dosya açılmaya çalışılıyor.

(10) Eğer dosya açılmamışsa kullanıcıya mesaj verilerek programdan çıkılıyor.

(11) Formumuzun boyutları ve ızgara boyutları tanımlanıyor.

(12) H adlı etiket içeriği “Hesap numarasi” oluyor.

(13) hisim adlı tanımladığımız text nesnesi oluşturuluyor.

(14) I adlı etiket içeriği “İsim” oluyor.

(15) isim adlı tanımladığımız text nesnesi oluşturuluyor.

(16) S adlı etiket içeriği “Soyisim” oluyor.

(17) soyisim adlı tanımladığımız text nesnesi oluşturuluyor.

(18) P adlı etiket içeriği “Hesap” oluyor.

(19) hesap adlı tanımladığımız text nesnesi oluşturuluyor.

(20) enter adlı tanımladığımız “Gir” etiketli buton oluşturuluyor.

(21) done adlı tanımladığımız “Çıkış” etiketli buton oluşturuluyor.

(22) Formumuzun görünür olması sağlanıyor. (Visible özelliği false yapılarak formumuzun görünmemesini sağlayabiliriz.)

(23) hesapekle adlı fonksiyon kodalrı başlıyor.

(24) Değişkenlerimiz tanımlanıyor.

(25) Eğer hismi adlı text nesnesi boş değilse yani bu alana veri girilmişse,

(26) Hesap alanı 0 dan farklı bir değer ise,

(27) Veriler dosyaya yazılıyor.

(28) Veri girişi yapılan alanlar bir sonraki kullanım için boşaltılıyor.

(29) Eğer hesap numarası alanı tamsayı girilmediyse kullanıcıya hata mesajı verdiriliyor.

(30) Dosyaya verileri yazarken hata oluşmuşsa kullanıcıya mesaj verdiriliyor.

(31) Tanımladığımız kullanıcı fonksiyonları çağrılıyor, buraya anlatılan kontroller yaptırılıyor.

(32) Dosya kapatılıyor.

(33) Eğer dosya kapatılırken hata oluşmuşsa kullanıcıya mesaj verdiriliyor.

(34) Oluşturduğumuz fonksiyon ana programdan çağrılıyor.

(1)import java.io.*;

import java.awt.*;

import java.awt.event.*;

(2)public class dosyayarat extends Frame implements ActionListener

(3) private TextField hismi,isim,soyisim,hesap;

(4) private Button enter,done;

(5) private DataOutputStream cikti;

(6) private Label H,I,S,P;

(7) public dosyayarat()

(8) super(”Musteri dosyasi Ac”);

(9) try

cikti=new DataOutputStream(new FileOutputStream(”musteri.txt”));

catch(IOException e)

(10) System.err.println(”Dosya dogru acilamadin”+e.toString());

System.exit(1);

(11) setSize(300,150);

setLayout(new GridLayout(5,2));

(12) H=new Label(”Hesap numarasi”);

add(H);

(13) hismi=new TextField();

add(hismi);

(14) I=new Label(”Isim”);

add(I);

(15) isim=new TextField(20);

add(isim);

(16) S=new Label(”Soyisim”);

add(S);

(17) soyisim=new TextField(20);

add(soyisim);

(18) P=new Label(”Hesap”);

add(P);

(19) hesap=new TextField(20);

add(hesap);

(20) enter=new Button(”Gir”);

enter.addActionListener(this);

add(enter);

(21) done=new Button(”Cikis”);

done.addActionListener(this);

add(done);

(22) setVisible(true);

(23) public void hesapekle()

(24) int accountNumber=0;

Double d;

(25) if(!hismi.getText().equals(”"))

try

accountNumber=Integer.parseInt(hismi.getText());

(26) if(accountNumber!=0)

(27) cikti.writeInt(accountNumber);

cikti.writeUTF(isim.getText());

cikti.writeUTF(soyisim.getText());

d=new Double(hesap.getText());

cikti.writeDouble(d.doubleValue());

(28) hismi.setText(”");

isim.setText(”");

soyisim.setText(”");

hesap.setText(”");

catch(NumberFormatException nfe)

(29) System.err.println(”Hesap numarasi tamsayi degisken olmalidir”);

catch(IOException io)

(30)System.err.println(”Dosyaya yazarken hata olustun”+io.toString());

System.exit(1);

(31) public void actionPerformed(ActionEvent e)

hesapekle();

if(e.getSource()==done)

try

(32) cikti.close();

catch(IOException io)

(33) System.err.println(”Dosya kapatilamadin”+io.toString());

System.exit(0);

(34) public static void main(String args[])

new dosyayarat();

Şekil 8 Şekil 9

Şekil 10 Şekil 11

Eğer hesap numarasını bir tamsayı değişken girmezsek yukarıdaki gibi bir hata mesajıyla karşılaşırız.

Bu Java programı ise yarattığımız sequentitial dosyadan verileri okumamızı sağlar.

(1)Giriş-çıkış ve grafik fonksiyonların içeren kütüphaneler programa dahil ediliyor.

(2) dosyaoku adlı bir sınıf tanımlanıyor.

(3) hisim, ,isim, soyisim, hesap adlı metin kutuları tanımlanıyor.

(4) next,done adlı butonları tanımlanıyor.

(5) io sınıfı nesnelerinden DataInputStream ile dosyamızın okunmasında kullanılacak nesne tanımlanıyor ve adı oku veriliyor.

(6) H,I,S,P adlı etiketler tanımlanıyor.

(7) dosyaoku adlı tanımladığımız fonksiyon kodları yazılmaya başlanıyor.

(8) (”Musteri dosyasi oku”) başlıklı bir üst sınıf tanımlanıyor.

(9) musteri.txt adlı dosya açılmaya çalışılıyor.

(10) Eğer dosya açılmamışsa kullanıcıya mesaj verilerek programdan çıkılıyor.

(11) Formumuzun boyutları ve ızgara boyutları tanımlanıyor.

(12) H adlı etiket içeriği “Hesap numarasi” oluyor.

(13) hisim adlı tanımladığımız text nesnesi oluşturuluyor.

(14) I adlı etiket içeriği “İsim” oluyor.

(15) isim adlı tanımladığımız text nesnesi oluşturuluyor.

(16) S adlı etiket içeriği “Soyisim” oluyor.

(17) soyisim adlı tanımladığımız text nesnesi oluşturuluyor.

(18) P adlı etiket içeriği “Hesap” oluyor.

(19) hesap adlı tanımladığımız text nesnesi oluşturuluyor.

(20) next adlı tanımladığımız “İleri” etiketli buton oluşturuluyor.

(21) done adlı tanımladığımız “Çıkış” etiketli buton oluşturuluyor.

(22) Formumuzun görünür olması sağlanıyor. (Visible özelliği false yapılarak formumuzun görünmemesini sağlayabiliriz.)

(23) kayitoku adlı fonksiyon kodları başlıyor.

(24) Değişkenlerimiz tanımlanıyor.

(1)import java.io.*;

import java.awt.*;

import java.awt.event.*;

(2)public class dosyaoku extends Frame implements ActionListener

(3) private TextField hismi,isim,soyisim,hesap;

(4) private Button next,done;

(5) private DataInputStream oku;

(6) private Label H,I,S,P;

(7) public dosyaoku()

(8) super(”Musteri dosyasi oku”);

(9) try

oku=new DataInputStream(new FileInputStream(”musteri.txt”));

catch(IOException e)

(10) System.err.println(”Dosya dogru acilamadin”+e.toString());

System.exit(1);

(11) setSize(300,150);

setLayout(new GridLayout(5,2));

(12) H=new Label(”Hesap numarasi”);

add(H);

(13) hismi=new TextField();

add(hismi);

(14) I=new Label(”Isim”);

add(I);

(15) isim=new TextField(20);

add(isim);

(16) S=new Label(”Soyisim”);

add(S);

(17) soyisim=new TextField(20);

add(soyisim);

(18) P=new Label(”Hesap”);

add(P);

(19) hesap=new TextField(20);

add(hesap);

(20) next=new Button(”ileri”);

next.addActionListener(this);

add(next);

(21) done=new Button(”cikis”);

done.addActionListener(this);

add(done);

(22) setVisible(true);

(23) public void kayitoku()

(24) int account;

String first,last;

double balance;

try

account=oku.readInt();

first=oku.readUTF();

last=oku.readUTF();

balance=oku.readDouble();

hismi.setText(String.valueOf(account));

isim.setText(first);

soyisim.setText(last);

hesap.setText(String.valueOf(balance));

catch(EOFException eof)

dosyakapat();

catch(IOException io)

System.err.println(”Dosya okurken hata olustun”+io.toString());

System.exit(1);

public void actionPerformed(ActionEvent e)

if(e.getSource()==next)

kayitoku();

else

dosyakapat();

private void dosyakapat()

try

oku.close();

System.exit(0);

catch(IOException e)

System.err.println(”Dosya Kapama Hatasi olustun”+e.toString());

System.exit(1);

public static void main(String args[])

new dosyaoku();

Şekil 12 Şekil 13

Yazdığımız Java programı derlendiğinde yukarıdaki form ile dosyadan verilerimizi okuyabiliriz.

BÖLÜM 5

RANDOM (RASGELE ERİŞİMLİ) DOSYALAR

Java programlama dilinde kullanılan bir diğer dosya tipi de random (rasgele erişimli ) dosyalardır. Bu dosyaların sıralı dosyalardan farkı erişilmek istenen kayıta, kayıt numarası verilerek erişilebilmesidir. Halbuki sıralı dosyalarda, istenen kayıta ulaşmak için diğer kayıtlar üzerinden kontrol edilerek geçilmesidir, bu da tabii ki zaman kaybına yol açmaktadır.

Aşağıdaki Java programı random dosyaya kayıt girilmesi sırasında kullanılacak metotların tanımladığı kısımlardır. Bu program diğer Java programlarında sınıf olarak kullanılıp, burada tanımlanan metotların diğer programlarda da kullanılması sağlanmıştır. ( Çoban,2000)

import java.io.*;

public class kayit

private int hesap;

private String soyisim;

private String isim;

private double hesaptakipara;

public void oku(RandomAccessFile dosya) throws IOException

hesap=dosya.readInt();

char first[]=new char[15];

for(int i=0;i

{first[i]=dosya.readChar();}

isim=new String(first);

char last[]=new char[15];

for(int i=0;i

{last[i]=dosya.readChar();}

soyisim=new String(last);

hesaptakipara=dosya.readDouble();

public void yaz(RandomAccessFile dosya) throws IOException

StringBuffer buf;

dosya.writeInt(hesap);

if(isim!=null)

buf=new StringBuffer(isim);

else

buf=new StringBuffer(15);

buf.setLength(15);

dosya.writeChars(buf.toString());

if(soyisim!=null)

buf=new StringBuffer(soyisim);

else

buf=new StringBuffer(15);

buf.setLength(15);

dosya.writeChars(buf.toString());

dosya.writeDouble(hesaptakipara);

public void yazhesap(int a){hesap=a;}

public int okuhesap(){return hesap;}

public void yazisim(String f){isim=f;}

public String okuisim(){return isim;}

public void yazsoyisim(String f){soyisim=f;}

public String okusoyisim(){return soyisim;}

public void yazhesaptakipara(double b){hesaptakipara=b;}

public double okuhesaptakipara(){return hesaptakipara;}

public static int boyut(){return 72;}

Aşağıdaki program random tipli bir dosyayı bellekte yaratmak için kullanılır. kayit isimli biraz önce tanımladığımız sınıfın import edilip, sahip olduğu metotların kullanıldığına dikkat ediniz.

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import kayit;

public class rasdosyarat

private kayit hesapdosyasi;

private RandomAccessFile girdi;

public rasdosyarat()

hesapdosyasi=new kayit();

try{

girdi=new RandomAccessFile(”musteri1.dat”,”rw”);

for(int i=0;i<100;i++)

{hesapdosyasi.yaz(girdi);}

catch(IOException e)

System.err.println(”Dosya a‡ma hatasn”+e.toString());

System.exit(1);

public static void main(String args[])

rasdosyarat H=new rasdosyarat();

Aşağıdaki program bir form ara yüzü tanımlanarak random dosyaya bilgi girişi yapılmasını sağlar.

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import kayit;

public class dosyaz extends Frame implements ActionListener

private TextField hesapalani,isimalani,soyisimalani,hesaptakiparaalani;

private Button birsonraki,kapat;

private RandomAccessFile girdi;

private kayit hesapdosyasi;

public dosyaz()

super(”Dosyaya Yaz”);

hesapdosyasi=new kayit();

try

girdi=new RandomAccessFile(”musteri1.dat”,”rw”);

catch(IOException e)

System.err.println(”Dosya Acma Hatasn”+e.toString());

System.exit(1);

setSize(300,150);

setLayout(new GridLayout(5,2));

add(new Label(”Hesap numarasi”));

hesapalani=new TextField();

add(hesapalani);

add(new Label(”˜sim”));

isimalani=new TextField(20);

add(isimalani);

add(new Label(”Soyisim”));

soyisimalani=new TextField(20);

add(soyisimalani);

add(new Label(”Hesaptaki Para”));

hesaptakiparaalani=new TextField(20);

add(hesaptakiparaalani);

birsonraki=new Button(”Gir”);

birsonraki.addActionListener(this);

add(birsonraki);

kapat=new Button(”€kŸ”);

kapat.addActionListener(this);

add(kapat);

setVisible(true);

public void eklekayit()

int accountNumber=0;

Double d;

if(!hesapalani.getText().equals(”"))

try

accountNumber=Integer.parseInt(hesapalani.getText());

if(accountNumber<=100)

hesapdosyasi.yazhesap(accountNumber);

hesapdosyasi.yazisim(isimalani.getText());

hesapdosyasi.yazsoyisim(soyisimalani.getText());

d=new Double(hesaptakiparaalani.getText());

hesapdosyasi.yazhesaptakipara(d.doubleValue());

girdi.seek((long)(accountNumber-1)*kayit.boyut());

hesapdosyasi.yaz(girdi);

hesapalani.setText(”");

isimalani.setText(”");

soyisimalani.setText(”");

hesaptakiparaalani.setText(”");

catch(NumberFormatException nfe)

System.err.println(”Hesap numaras tamsay de§iŸken olmal”);

catch(IOException io)

System.err.println(”Dosyaya yazarken hata oluŸtun”+io.toString());

System.exit(1);

public void actionPerformed(ActionEvent e)

eklekayit();

if(e.getSource()==kapat)

try

{girdi.close();}

catch(IOException io)

System.err.println(”Dosya kapatlamadn”+io.toString());

System.exit(0);

public static void main(String args[])

new dosyaz();

Şekil 14 Şekil 15

dosyaz adlı Java programı derlendiğinde random tipli dosyaya veri girişi yapılması sağlayan yukarıdaki form ekrana gelir.

BÖLÜM 6

JDBC

Bundan sonraki iki bölümde JDK ile gelen sınıflar sayesinde, ilişkili veri tabanlarına veya SQL(Yapısal sorgulama dili) ile ulaşılan veri tabanlarına göz atacağız.

İlk olarak veri tabanlarının veri nasıl depoladıklarını öğrenelim. Java bunu basit olarak SQL, veri tabanlarının yönetimi ve sorgulanmasında kullanılan dil, ile yapar. Daha sonra da Java Database Connectivity (JDBC) –Java veritabanı bağlantısı- ,verilerin sunulması ve alınmasında kullanılan standart, sınıflarına göz atacağız. Bir kere veri tabanına bağlandıktan sonra, artık SQL dilini kullanarak verilere işleyebilirsiniz.

Bu bölümde işleyeceklerimiz özeti, SQL ve JDBC dir. Bir sonraki bölümde ise JDBC ile sağlanan özellikle ve veri tabanı sunumunun nasıl yapılacağını öğreneceğiz.bu bölümde öğreneceklerimiz:

Veri tabanı nedir?

Basit SQL cümlecikler nelerdir ve bunları nasıl uygularız.

JDBC ile veri tabanı bağlantısı nasıl gerçekleştirilir?

JDBC programları nasıl yazılır?

JDBC uygulamalarındaki anahtar noktalar nelerdir?

(www.java.sun.com)

6.1 JDBC İçeriği ve Terminolojisi

İlk olarak veri tabanı terminolojisine bakalım. Veri tabanına ulaşma, uzaktaki veya yerel bir veri tabanına ulaşıp, buradaki verilerin alınması veya işlenmesi anlamına gelir. Veri tabanları ilişkisel olmak zorunda değildir. Bir çok değişik formda veri tabanları olabilir, bunlardan bazıları;

Uzaktan erişimli ilişkisel server üzerinde bulunan veri tabanları; örneğin SQL Server.

Yerel bilgisayarınızda bulunan ilişkisel veri tabanları; örneğin Personal Oracle veya Microsoft Access.

Bilgisayarınızdaki metin dosyaları.

Tablolama programları.

Uzaktan veri erişimine izin veren mainframe bilgisayarlar.

Canlı bilgi sevisleri; örneğin Dow Jones vb.

JDBC, ilişkisel veri tabanlarına ara yüz olarak tanımlanabilir. JDBC ilişkisel veri tabanlarına ulaşmada kullanılabilmesine rağmen ben bu bölümde ve bir sonraki bölümde JDBC ile ilişkisel veri tabanlarına ulaşmayı anlatacağım. Eğer daha önce ilişkisel veri tabanlarıyla ilgilenmediyseniz, şu tavsiyeleri dinlemelisiniz. İlişkisel veri tabanları mantıksal olarak öğrenmesi oldukça kolay ve zevklidir.

Java Veri tabanı bağlantısı (JDBC) sınıfları SQL cümlelerini çalıştırarak ilişkisel ver,tabanları erişimi ve bu veriler üzerinde işlem yapmayı sağlar. JDBC nesneye dayalı, veri tabanına erişim için geliştirilen uygulama programları ara yüzü (Application Programming Interface - API), ve Java geliştiricileri ve veri tabanları için standart olarak geliştirilmiştir.

JDBC, diğer bir veri tabanı ara yüzü olan, X/Open SQL CLI( Call Level Inteface), özellikleri temel alınarak geliştirilmiştir. Fakat bu standardın bilgisine sahip olmak , JDBC öğrenmek için yeterli değildir. Buna rağmen, veri tabanına ulaşmak için yazılmış bir veri tabanı programınız varsa, JDBC ye kullanmadan önce bu deneyime sahip olmanız sizin için çok iyi olacaktır.

Java.sql paketi, veri tabanına ulaşmada kullanılan API ler içeren sınıflar barındırmaktadır.

Aşağıdaki şekil technical_library veritabanı ( Wrox Web sitesinden ulaşılabilir) temel bileşenlerini göstermektedir. Bu şema bu sonraki anahtar noktaların anlatmakta ve örneklerde kullanılacaktır.

Şekil 16

Bu tablo basit bir veri tabanı örneğidir. Sizde bunun benzer, ilişkili veri tabanları yaratabilirsiniz.

İlişkisel veri tabanlarını üzerinde yapacağınız her türlü işlem, SQL (Structed Query Language –Yapısal Sorgulama Dili) ile sağlanacaktır. SQL Java gibi uygulama dili değildir. SQL daha çok sorgulama ve deklare için kullanılır. Bu da veri tabanı sunucusuna ne yapmak istediğini söylemesi fakat bunu nasıl yapılacağını söylememesi anlamına gelir. Her bir SQL cümleciği veri tabanı sunucusu tarafından analiz edilir, işlemler bu tanımlama doğrultusunda parçalara ayrılarak veri tabanı motoru tarafından sağlanır. Veri tabanı motoru çeşitli istekleri birleştirir. Değişik kurumsal veri tabanı istekleri genel veri tabanı motorlarını kullanabilir.

6.2 Tablolar

İlişkisel veri tabanları tablolardan oluşur. Tablo, yukarıdaki authors adlı tabloda olduğu gibi, ilişkiyi sağlayan bir adet primary (birincil) veritabanı olacaktır. Her hangi bir zamanda yapacağınız Define, create, update, delete işlemlerinde tablo içerisindeki verilerle çalışacaksınız.

Bir veri tabanında tablo yarattığınızda, verilerinizi içerecek dikdörtgen şekilli bir ızgara yaratmış olacaksınız. Kısacası tablo satır ve sütunlardan oluşan veri tabanı yapısıdır. Her bir satır, birbirleriyle ilişkili verileri içerir, kısacası veri nesneleri arasında bağlantıyı sağlar.

Satırlar için teknik terim tuple dir. Her bir sutun satırı alan denilen bölümlere ayırır, ve bu sütunlar, satırlardaki nesneler ait özellikler olarak tanımlanır. Böylece tabloda bir çok sütun karışık halde yerleştirilmiştir.

Şekil 17

Mantıksal olarak tablo, satır ve sütunlardan oluşan bir yapı olsa da aslında fiziksel olarak böyle değildir. Ama biz verilere ulaşırken bu yapı ile karşılaşacağımızdan bu kadarını bilmemiz yeterlidir.

6.2.1 Tablo sütunları

Daha öncede söylediğim gibi, tablolar dikdörtgen şekilli hücrelerden oluşan ızgaralar olarak düşünülebilir. Izgara keyfi olarak verilebilecek sayıda satır ve sütuna bölünebilir. Izgara içerisindeki, her bir sütundaki hücre çeşitli veriler içerir. Sadece çeşitli tipte veri içermez, aynı zamanda alana isimlerine kategorilere ayrılmış verilerde içermiş olur. Örneğin bir önceki şekildeki lastname adlı adlı alan authors adlı tablodaki üç alandan biridir.

6.2.2 Tablo satırları

Tablo içerisindeki her bir satır, tuple olarak adlandırılan ilişkili verilerin oluşturduğu yapıdır. Bazı veri tabanlarında her bir satıra kayıt denir.

Author adlı tablodaki bir satır (kayıt).

Şekil 18

6.3 SQL ile tanışalım

Yapısal sorgulama dili (Structed Query Language) ilişkisel veri tabanlar için geliştirilmiş bir standart olarak kabul edilmektedir. SQL dilinin ilişkisel veri tabanları için sorgu dili olarak kabul edilmesi 1980 li yıllarda istemci/sunucu mimarisinin ortaya çıkmasıyla kabul görmüştür.

SQL dilinde ilginizi çekecek ilk özellik kolay okunabilmesidir. Her bir sorgulamadaki yapı İngilizce diline çok yakındır. Syntax çok kaolay öğrenilebilir ve anlaşılabilirdir. İkinci olarak, SQL de kullandığınız komutlar veri tabanında en çok kullanacağınız sorgulamalar için geliştirilmiştir. Veri tabanına isteğinizle ilişkili bir sorgu gönderirsiniz, veri tabanı size bir sonuç gönderir veya bir işlem gerçekleştirir.

6.4 Veri tabanı tabloları geliştirme

Daha önce örnek verdiğimiz, technical_library tablosunda aşağıdaki alanları oluşturmak isteyelim.

Books

Article

Authors

Publishers

Bu alanlarında aşağıdaki bilgileri içereceği düşünelim.

Books

ISBN

Kitap adı

Yazarlar

Publishers

Yazarlar

Başlık

Yayım tarihi

Authors

Soyadı

Adı

Yayımlanan kitapları

Yayımlanan makaleleri

Yayımcı

Yayımcı kodu

Adı

(www.java.sun.com)

Şimdi veri tabanındaki tabloları oluşturmaya başlayalım. Bu tablomızın adına authors diyelim. Bu tablodaki sütunlar ise aşağıdaki şekilde olsun.

Sütun başlığı

Açıklaması

Authid

Bir çok yazar aynı isme sahip olabilir.

Lastname

Aile adı

Firstname

İlk adı

Address1

Adres için ilk satır

Address2

Adres için ikinci satır

City

Şehir

State_prov

Devlet

Postcode

Postakodu

Country

Ülke

Phone

Telefon

Fax

Fax

Email

Email adresi

Tablo 1

Şimdi yapmamız gereken her sütunun başlığını uygun bir veri tipi seçmektir. Tabii ki burada geçerli olan SQL dili Java programlama dilinin kullandığı değişken yapılarıdır. Tanımlanan bu veri tipleri SQL tarafından kabul edilir ve işleme konulur. Şimdi SQL in desteklediği bir kaç veri tipine bakalım.

SQL Veri Tipleri

Tanımlama

CHAR

Değişebilen uzunluktaki string

VARCHAR

Değişebilen uzunluktaki string

SQL Veri Tipleri

Tanımlama

BOOLEAN

Mantıksal değerler –true veya false

SMALLINT

Küçük tamsayı değeri, -127 +127

INTEGER

Büyük tamsayı değeri, -32767 +32767

NUMERIC

Noktalı sayılar

FLOAT

Kayan noktalı sayılar

CURRENCY

Para birimi

DOUBLE

Yüksek duyarlıklı kayan noktalı sayılar

DATE

Tarih

TIME

Zaman

DATETIME

Tarih ve zaman

RAW

Binary veri(nesneleri veri tabanında tutar)

Tablo 2

Şimdi de oluşturacağımız tablodaki alanların veri tiplerini belirleyelim.

Sütun adı

Veri tipi

Authid

INTEGER

Lastname

VARCHAR

Firstname

VARCHAR

Address1

VARCHAR

Address2

VARCHAR

City

VARCHAR

State_prov

VARCHAR

Pzpcode

VARCHAR

Country

VARCHAR

Phone

VARCHAR

Sütun adı

Veri tipi

Fax

VARCHAR

Email

VARCHAR

Tablo 3

6.4.1 Tablomuz nasıl çalışacak

Sütun adları alan içerisinde saklanacak bilgi hakkında bilgi verir, fakat bilgisayar alan adlarından hangi tip verilerin saklanacağını anlayamaz. İşte bunu belirlemek için her bir alan bir veri tipine sahiptir

Books tablosu

Sütun başlığı

Açıklaması

Isbn

Kitap için global bir tanımlama

Title

Kitabın adı

Pub_code

Kitabın yayımlayıcısının kodu

Tablo 4

Sütun adı

Veri tipi

Isbn

VARCHAR

Title

VARCHAR

Pub_code

CHAR(8)

Tablo 5

6.4.2 Tabloların dizayn edilmesi ve ilişkilendirilmesi

Author tablosu ile book tablolarının isbn(kitap tanımlayıcısı) ve authid alanlarıyla ilişkilendirildiği görmek çok da zor değildir. Ancak bu iki alanın birbiriylr ilişkili olabilmesi için veri tiplerinin de aynı olması gerekmektedir.

Şekil 19

Yukarıdaki oluşturulan auth_books tablosuna kesişim tablosu denir. Şimdi tablolarımızı oluşturduğumuza göre artık SQL cümleleri kullanarak veri tabanımızdaki tablolara bilgi girişi yapabiliriz.

6.5 SQL Yapıları

Çoğu SQL yapıları 2 grupta toplanır.

Veri tanımlama dili(DDL-Data Definition Language) :Tablo ve içindeki verileri tanımlamada kullanılır.

Veri işleme dili(DML-Data Manupiliting Language):Veriler üzerinde işlem yapmakta kullanılır.

SELECT cümleciği: Bir dizi sonuç çevirir.

Everything else cümleciği: Sonuç çevirmez

Tablo oluşturmak için, örneğimizde DDL kullanacağız .DDL CREATE TABLE ve ALTER TABLE gibi SQL cümleleri içermektedir. Projemizin ilerleyen kısımlarında DML yapılarını kullanarak tablolarımıza veri ekleme,veri arama gibi işlemler yapacağız.

DDL için bir örnek:

CREATE TABLE authors{

authid INT NOT NULL PRIMARY KEY,

lastname CHAR(15) NOT NULL,

firstname CHAR(15),

address1 CHAR(25),

address2 CHAR(25),

city CHAR(25),

zipcode CHAR(10),

country CHAR(15),

phone CHAR(20),

fax CHAR(20),

email CHAR(25));

SQL cümleciklerinin büyükle yazıldığına dikkat ediniz. Daha kullanışlı olması açısından VARCHAR veri tipi tanımlaması yerine CHAR veri tipi tanımlanmıştır.

NOT NULL PRIMARY KEY söz dizimi veri tabanına iki ey belirtmektedir. Birincisi authid sütunundaki, her bir satırdaki alanın değeri NULL olamaz. Her bir satırda bu alanın bir değeri girilmelidir. İkinci olarak, PRIMARY KEY açıklaması bu alanın tabloda index alanı olacağı anlamına gelmektedir. Bu alan için girilen kayıt veri tabanında sadece bir adet olabilir. Yani authid alanındaki değer başka bir kayıtta tekrarlanamaz.

Bu anlattıklarım, veri tabanın index alanının en önemli özelliklerindendir. Create deyimiyle veri tabanının oluşturduktan sonra sırada INSERT deyimiyle tabloya veri girmeye gelmiştir.

6.5.1 INSERT Cümleciği

Insert cümleciği için 3 önemli bölüm vardır.

Veri eklenecek hedef tablo belirlenir.

Verilerin atanacağı sütunlar belirlenir.

Bu sütunlar için kullanılacak veriler belirlenir.

Insert cümleciği INSERT INTO, kelimeleriyle başlar ve hedef tablo adıyla devam eder.

INSERT INTO authors

Daha sonra hedef tabloda verilerin atanacağı sütun adları belirtilir.

(authid,lastname,firstname,email)

Son olarak bu sütunlara atanacak verileri belirlemeye sıra gelmiştir.

VALUES (99,’catmali’,’murat’,’catmali@hotmail.com)

Böylece INSERT cümleciği tamamlanmış oldu.

INSERT INTO authors (authid,lastname,firstname,email) VALUES ‘99,’catmali’,’murat’,’catmali@hotmail.com)

6.5.2 SELECT Cümleciği

Veri tabanından verileri almak için kullanılır. SELECT cümleciği için 4 önemli bölüm vardır.

Hangi verilerin alınacağı belirlenir.

Verilerin nereye alınacağı belirlenir.

Şartlar ve filtereler belirlenir.

Hangi sırayla verilerin alınacağı belirlenir.

Select cümleciğinden sonra ikinci sırada hangi sürunların alınacağının karar vermektedir.

SELECT firstname, lastname,authid

Şimdi de verilerin hangi tablodan alacağımıza karar vermeliyiz. Belki bir kaç tabloda aynı alanlar olabilmesi olasılığı vardır. Burada FROM deyiminden sonra tablo adı belirtilerek bu sorun aşılabilir.

FROM authors

Sonuç olarak ;

SELECT firstname, lastname,authid FROM authors

Veri tabanından aldığımız alanlara takma isim (alias) verebiliriz. Böylece birden fazla alanı tekbir alan altında toplayabiliriz.

Örneğin;

SELECT firstname, lastname,authid AS author_id FROM authors

Bu örnekte veri tabanından alınan üç alan author_id alanında birleştirilmiştir.

Eğer tablodaki bütün alanları seçmek istersek;

SELECT * FROM authors cümleciği işimizi görecektir.

İstediğimiz bir özellikteki alanlardaki kayıtları seçebileceğimiz SQL SELECT cümleciği örneği;

SELECT lastname,firstname FROM authors WHERE country=’UK’

Bu cümleyle country=’UK’ olan kayıtlardaki lastname, firstname alanları authors adlı tablodan seçilmektedir.

6.5.3 UPDATE Cümleciği

Bu SQL cümleciği, tablodaki varolan veriyi değiştirmek için kullanılır. Update cümleciğinden önce işlem yapılacak alanın SELECET cümleciği ile seçilmesi gerekmektedir. Update kelimesini işlem yapılacak tablo adı takip eder.

UPDATE authors

Set kelimesiyle belirtilen tablodaki alanın yeni değerini belirlenebilir.

SET lastname=’catmali’

Son olarak da filtre (şart) verilerek hangi kayıtın UPDATE işleminden etkileneceği belirlenir.

WHERE authid=27

Bu cümleyle authid alanı 27 olan kayılar UPDATE cümleciğinde belirtilen işleme tabi tutulur.

Sonuç olarak UPDATE cümleciğinin son hali;

UPDATE authors SET lastname=’catmali’ WHERE authid=27

6.5.4 DELETE Cümleciği

Veri tabanındaki herhangi bir tablodan istenilen şarta uygun kayıtların silinmesinde kullanılır. DELETE cümleciği DELETE, FROM, WHERE anahtar kelimelerinden oluşmaktadır.

DELETE FROM books WHERE isbn=’015415454’

Bu SQL cümleciği ile books adlı tablodan isbn alanı 015415454 olan kayıtlar silinmektedir.

6.6 JDBC Paketi

JDBC paketi SQL cümlelerini alıştırmak için hazırlanmış yüksek seviyeli bir veri erişim ara yüzüdür. Yani, JDBC veri tabanı satır ve sütun işlemlerini otamatik olarak düzenlemek üzere geliştirilmiş bir ara yüzdür. JDBC uygulamaları değişik veri tabanları için geliştirilmiştir. Bu yüzden diğer veri tabanlarına geçiş hiç de

Şekil 20

zor olmayacaktır.

Kullanıcı için JDBC java uygulamaları üstte görüldüğü gibidir.

JDBC veri tabanı yönetimini her bir veri tabanı sürücüsüne JDBC ara yüzü ile ilişki kurarak yapmaktadır. Bu sayede JDBC sınıfları veri tabanı alarak diğer Java sınıfları tarafından işlenmesine olanak vermektedir. Bundan noktadan sonra bu konu üzerinde durulacaktır.

6.6.1 JDBC ve ODBC ilişkisi

JDBC uygulamalarının bu kadar pratik olmasının ana nedeni diğer veri tabanı uygulamalarıyla uyumlu olmasıdır. JDBC ve ODBC ‘nin ortak yanı da, daha önce bahsedildiği gibi ikisinin de SQL X/Open CLI tabanlı olmasıdır.

Bu noktadan sonra kullanılacak bazı teknik terimlerin açıklanmasında yarar vardır.

6.6.2 Sürücü yöneticisi (Driver manager): Veri tabanı sürücülerini yükler, ve uygulama ile sürücü arasındaki bağlantıyı yönetir.

6.6.3 Sürücü (Driver): Uygulama veri tabanıyla ilgili isteklerini, veri tabanının anlayacağı çağrılara dönüştürür.

6.6.4 Bağlantı (Connection): Uygulama ve veri tabanı arasındaki oturum.

6.6.5 Cümle (Statement): Sorgulama ve güncelleme işlemlerinin yapılmasında kullanılan SQL cümleleri

6.6.6 Metadata: Veri, veri tabanı ve sürücü hakkında alınan bilgiler.

6.6.7 Sonuç seti (Result Set) : SQL cümlelerin işlenmesi sonucu ortaya çıkan, mantıksal satır ve sütun yapıları.

6.6.1.1 JDBC Temelleri

Bu bölümde buraya kadar anlattıklarımı ve gerekli sürücülerin bilgisayarınızda yüklü olduğu kabul edilmektedir.

Gerekli olan sınıfları yükleyin.

JDBC sürücüsünü yükleyin.

Veri tabanını belir

Kategori: Bilim