13 Mart 2012

Windows Phone 7 de Veri Depolama - 2


Windows Phone 7 de Veri Depolama - 1 konulu makalemizde genel hatlarıyla isolated-storage bellek alanının kullanılmasını incelemiştik. Geçen makalemizde Isolated-Storage bellek alanındaki verileri windows phone 7 uygulama ara yüzü nesnelerimize 'data-binding' yöntemi kullanarak bağlayıp, çeşitli kullanım yöntemleri incelemiştik.  Bu makalemizde ise, hali hazırda geliştirilmiş ve codeplex.com gibi internet sitelerine eklenmiş olan alternatif veritabanı projelerini inceleyeceğiz.  Windows Phone 7 de SqlServerCE gibi bir veri tabanı teknolojisinin kullanılmaması diğer taraftan windows phone 7 üzerinde offline verilerle çalışma ihtiyacı, bizleri daha derli toplu bir şekilde isolated-storage alanının kullanımına itmektedir.


Tekrar belirtmek isterim ki bu yazımızda SqlServer Compact Edition gibi bir veritabanı teknolojisi incelenmeyecek. (Zaten şu an phone 7'nin böyle bir desteği yok) Yalnızca isolated-storage bellek alanı üzerinde System.IO.IsolatedStorage.IsolatedStorageFile gibi sınıfların kullanıldığı, basit anlamda dosyalara verilerin belirli bir düzen içerisinde yazılıp-okunması gibi temel işlemleri içeren kütüphaneleri incelemiş olacağız.


Windows Phone 7 Database;

Windows Phone 7 Database projesinin kaynak kodlarına http://winphone7db.codeplex.com/ internet sitesi üzerinden ulaşabiliyoruz.














Oldukça sade ve düzenli yazılmış bu projeyi bilgisayarımıza indirdiğimizde, aşağıdaki imaj da görüleceği gibi WindowsPhoneDatabase isimli bir projenin olduğu görülecektir.








































İndirilen solution içerisinde SilverlightPhoneDatabase projesi ile birlikte SilverlightPhoneDatabaseTest isimli bir proje de yer almaktadır. SilverlightPhoneDatabase kütüphanesi ile silverlight isolated-storage tabanlı, windows phone uygulamaları için ayrılmış olan bellek alanı içerisinde bir veritabanı oluşturulmakta. Kütüphane içerisindeki methodları inceleyecek olursak, aşağıdaki class diagram üzerinden de görüleceği gibi Framework Proje olan SilverlightPhoneDatabase içerisindeki temel sınıfların Database, Table ve Crypthography olduğu görülecektir. Bunun yanı sıra bir takım yardımcı sınıflar ve bir de interface kullanılmış. 


































Şimdi yukarıdaki class diagram üzerinde görülen birkaç methodun kullanımına göz atalım.
Bu örnekte Person (Kişi) isminde bir tablo oluşturulacak. Person tablosuna karşılık gelen sınıf aşağıdaki gibi tanımlanmış;

C#


Database.DeleteDatabase("test");
Database db = Database.CreateDatabase("test");
db.CreateTable<Person>();
if (db.Table<Person>() != null)
{
    db.Table<Person>().Add(NewPerson());
}






Sterling WP7 Database;

Şimdi de farklı bir kütüphaneyi incelemek üzere http://sterling.codeplex.com/ adresli codeplex internet sitesi üzerinde yayınlanmış olan kütüphaneyi inceleyelim. Bu kütüphanenin kullanıldığı başka bir örneğe de http://www.codeproject.com/KB/silverlight/SLDatabaseApp.aspx adresinden ulaşabiliriz. Oluşturulmuş olan bu projede objelere erişirken tamamen LINQ desteği kullanılabilmektedir.



















Aşağıdaki grafik incelendiğinde, Sterling DB' nin de performans yönünden de oldukça başarılı olduğu görülecektir.























Sqlite Client for Windows Phone;

Windows Phone 7 işletim sistemi altında çalışabilir farklı bir database projesi olarak Sqlite Client isimli projenin de incelenmesinde fayda var. Sqlite Client projesine http://sqlitewindowsphone.codeplex.com/ adresinden ulaşılabilir. Örnek projeyi bilgisayarınıza indirdiğinizde Community.CsharpSqlite.WP isimli bir veritabanı kütüphanesi için oluşturulmuş bir proje ile bir de CSharpSqlite.TestProject isimli Phone 7 projesi görülebilir. Bu proje de Windows Phone 7 Emulatör aracılığı ile F5 ile çalıştırılmak istendiğinde ilk olarak aşağıdaki gibi örnek bir uygulama ile başlayacaktır.








































Örnek Windows Phone 7 projesinde yer alan btnInsert isimli (Generate Data başlıklı) butona tıklanıldığında aşağıdaki kod satırları çalıştırılarak, 50 adet random verinin test isimli bir tabloya nasıl kaydedildiğini görebiliriz.

C#


private void btnInsert_Click(object sender, RoutedEventArgs e)
{
  lbOutput.Text = "";
  if (db != null)
  {
      try
      {
          var start = DateTime.Now;
          SQLiteCommand cmd = db.CreateCommand("");
          int rec;
          var rnd = new Random();
          for (int i = 0; i < sliderRows.Value; i++)
          {
              var stream = new byte[i + 1];
              rnd.NextBytes(stream);
              var tst = new Test(i,"Entry "+i,i+10,DateTime.Now,(i%2==0)?true:false,stream);
              cmd.CommandText = " Insert into test (id,name,bytes,modified,condition,stream) " +
                                " values (@id,@name,@bytes,@modified,@condition,@stream)";
              cmd.ExecuteNonQuery(tst);
          }
          lbOutput.Text += "\nInserted " +
                           sliderRows.Value +
                           " rows\r\nGenerated in " +
                           (DateTime.Now - start).TotalSeconds;
      }
      catch (SQLiteException ex)
      {
          lbOutput.Text += "\nError: " + ex.Message;
      }
  }
}




Son olarak da Perst isimli object-oriented veritabanı sisteminin erişim adreslerini vererek makalemizi sonlandıracağız. Perst hakkında detaylı bilgilere http://www.mcobject.com/perst adresinden ulaşılabilir. İlgili Demo projeye ulaşmak için http://mobileworld.appamundi.com/blogs/andywigley/archive/2010/06/07/perst-a-database-for-windows-phone-7-silverlight.aspx adresini kullanabilirsiniz.
Demo uygulamayı bilgisayarınıza indirip Emulatör ile çalıştırdığınızda aşağıdaki gibi ekran görüntüleri ile karşılaşacağız.




































Perst Windows Phone 7 Database ile ilgili olarak da tabloları Drop etmeye yarayan örnek kod parçaları da aşağıdaki gibidir.

C#


public void Clear()
{
    IsComplete = false;
    try
    {
        Database.DropTable(typeof(Contact));
        Database.DropTable(typeof(Lead));
        Database.DropTable(typeof(Activity));
        Database.Storage.Commit();
        InvokeClearComplete(EventArgs.Empty);
    }
    finally
    {
        IsComplete = true;
    }
}




Şu ana kadar incelediğimiz windows phone 7 veritabanı projeleri bize geleneksel veritabanlarının kullanım şekillerini aratmayacak şekilde taklit edilmiş/tasarlanmış olduklarını söyleyebiliriz. İnternet üzerinden ücretsiz WP7 veritabanı projelerinin olduğunu gözlemleyebiliyoruz. İhtiyaçlar arttıkça bunlara benzer alternatif veritabanı projeleri de artacak ve gelişecektir. Son olarak bu projelere ait referans linklerin tümünü bir arada vererek makalemizi sonlandıralım.

http://winphone7db.codeplex.com/ (Windows Phone 7 Database)
http://sterling.codeplex.com/ (Sterling)
http://sqlitewindowsphone.codeplex.com/ (Sqlite Client)
http://www.mcobject.com/perst (Perst)

Kolay gelsin.

1 yorum:

Unknown dedi ki...

windows 7 de böyle bir depolama aracının olması güzel