Makale Özeti

CrossFire ile Symbian, Palm OS ya da Pocket PC için bir uygulama geliştirirken database yapısını ne şekilde oluşturabileceğimizi, mobil database engine'ler arasında belirgin bir farklılıkla öne çıkan Sql Anywhere - UltraLite'ın kullanımını görelim.

Makale

     Selamlar, Önceki makalede .NET ortamında Symbian ve Palm OS için ilk uygulamamızı yapmıştık. Bu makalede Smart Device uygulamalarını biraz daha geliştirerek yine CrossFire uygulaması ile Sybase firmasının SQL Anywhere - UltraLite ürününü inceleyeceğiz.

    Yaptığımız uygulamaların büyük çoğunluğu database kullanan, yoğun mantıksal işlemler çalıştırarak sonuçlar üreten uygulamalardır. Özellikle mobil uygulamalarda, datanın saklanması yanı sıra, syncronization (an uyumluluk), replication gibi bir çok zorunluluk ta karşımıza çıkmaktadır ve şimdi bütün bu sorunlara bir yenisi daha ekleniyor. Platform bağımlılığı. Siz uygulamanızı Pocket PC icin yazdınız ve SQL Server 2000 CE ile çok performanslı bir şekilde çalışıyor. Peki ya bu uygulamanızı Palm OS'a ya da Symbian OS'li bir mobil cihaza taşımanız gerekirse?

    CrossFire,bizleri bu platform bağımlılığından fazlasıyla kurtarıyor. Ama database düzeyinde baktığımız zaman, platform bağımsızlığı nasıl sağlanabilir? Aslında AppForge firması Sybase ile ortak bir çalışma yaparak CrossFire içierisine güzel bir DB engine koymayı ihmal etmemişler. Fakat, bu makalede inceleyeceğimiz, kullanımı çok daha kolay olan, daha performanslı çalışan, Sybase firması tarafından lanse edilen UltraLite.

     Diğer mobile database engine'lere göre UltraLite çok faydalı bir tool sunuyor bizlere : UltraLite Schema Painter.  Bu tool sayesinde, database designını görsel olarak yapabilir, bir çok özelliğini, default degerlerini, tabloların relational yapılarını ve hatta indexleri oluşturabiliriz.

    Uygulamamızda kullanıcağımız database şeması yukarıda gördüğünüz gibi, tek bir Musteri tablosundan oluşan deneme database'i. Bu şematik yapimizi .usm uzantısı ile uygulamamızın ulaşabileceği bir path'e kopyalıyoruz ve uygulamamız tarafından bu şema kullanılarak database üretiliyor. Ben deneme.usm dosyasını solutionın bulunduğu foldera koymayı tercih ediyorum.

    VS.NET'i açalım ve database için bir test programı hazırlayalım. Ben CrossFire uygulamalarından Palm OS HiRes'i seçtim. Ama bildiğimiz gibi, herhangi bir platform için de yapıcağımız uygulama sorunsuz çalışacaktır. Aşağıdaki gibi bir ekran designınını yaratalım.

    Görsel dizaynı tamamladıktan sonra, öncelikle database bağlantı kuracağımız fonksiyonu yazalım. Bu fonksiyonu yazarken unutmamamız gereken en önemli şey, Schema Painter ile database'i değil sadece database'in nasıl olacağını design ettiğimizdir. Yani, kısaca, database, programımız tarafında yaratılıacaktır. Aşağıdaki fonksiyon database ile gerekli bağlantıyı ve de yaratma işlemini başarıyla gerçekleştirir.

private void DBYarat()  
    {
               DbMgr= new UltraLiteAFLib.ULDatabaseManager();
               string open_parms;
               string create_parms;
           open_parms = "dbf=..\\..\\deneme.udb;palm_db=Syb2;";
                                                               try
                                                               {
                                                                              create_parms = open_parms + ";schema_file=..\\..\\deneme.usm";
                                                                              Connection = DbMgr.CreateDatabase(create_parms);
                                                                              //database yoksa yaratir
                                                               }
                                                               catch(Exception)
                                                               {              //database varsa, baglanti kurar
                                                                              Connection = DbMgr.OpenConnection(open_parms);
                                                               }
        }

    Database ile bağlantı kurduktan sonra, şimdi de Musteri tablosundaki verilere ulaşalım. Bunun için yapmamız gereken tek şey query yazıp onu çalıştırmak ve de sonuçları gridde göstermek. Fakat burda küçük bir sorun karşımıza çıkıyor. Malesef CrossFire gridde databind özelliği yok. Bu nedenle grid itemlarını tek tek eklememiz gerekiyor.

private void GridDoldur()     {
                statement = Connection.PrepareStatement("Select MUSTERI_ID,AD,SOYAD from Musteri","deneme");
                result = statement.ExecuteQuery();
                //sonuclarimiz result kümesinde.
 
                grid1.Cols = 3;
                grid1.DefaultColWidth = 50;
 
                while (result.MoveNext()) //CrossFire Gridin databind özelligi olmadığı için resultin içindeki itemları tek tek gride ekliyoruz.
                      grid1.AddItem(result.GetString(1) + "\t" + result.GetString(2) + "\t" + result.GetString(3));
}

    Ve son olarak, database'e data ekleyip çıkarıcak iki fonksiyonu yazalım.

private void btnSil_ClickEvent(object sender, System.EventArgs e)  {
                short index = grid1.Row;
grid1.RemoveItem(index);
                statement = Connection.PrepareStatement("Delete from Musteri where MUSTERI_ID = " + txtMusteriID.Text,"");
                statement.ExecuteStatement();
               
                txtMusteriID.Text = "";
                txtAdi.Text = "";
                txtSoyadi.Text = "";                                             
}
private void btnEkle_ClickEvent(object sender, System.EventArgs e){
                DataEkle(short.Parse(txtMusteriID.Text), txtAdi.Text, txtSoyadi.Text);
}

    Yapmamız gerekenler işte bu kadar.Gördüğünüz gibi, database designı ile kod tarafında ugraşmadık. Tabloların relationlarını, indexlerini ve hatta hangi tabloların diğer databaseler ile senkronizasyona gireceğini bile UltraLite Schema Painter da yaptık. Sonrasında da sadece database bağlanarak data manupulation işlemlerini geçekleştirdik.

    En güzel şey ise, bu kodları ve bu database'i hiç değişiklik yapmadan Symbian bir telefonda, Palm da (zaten Palm OS HiRes projesiydi), Pocket PC'de ve hatta bu testleri nasıl yapıyorsak, hiç bir emulatöre gerek kalmadan, PC'mizde çalıştırabilmemiz. İşte .NET'in platform bağımsız oluşunun güzel bir örneği.

Kivanc Ozuolmez

Kaynak Kodlar