Örnek SQLite kodları
Yazan: yugruk Kasım 13, 2006
Bir önceki yazımda SQLite adlı gömülü veritabanı yazılımını anlatmıştım bu yazıya da bir kaç örnek kod koymamın yararlı olacağını düşündüm.
Veritabanları üzerine ister kendi başına çalışan ister gömülü bir veri tabanına bağlanma (yani açma),veri tabanında tablo oluşturma ,veri tabanına veri ekleme ve veri tabanından veri alma işlemleri mutlaka vardır.
SQLite C kütüphansinde
Veri tabanı yaratmak için:
SQLite ile gelen sqlite3 programını kullanacağız.Bu program bir nevi veritabanı yönetim aracı,bu program ile veritabanı yaratabilir,tablo ekleyebilir,tabloya veri ekleyebilir…yani SQL kodları ile istediğimiz her şeyi yaptırabiliriz.
sqlite3 db_adi komutu ile sqlite3 programını çalıştırarak db_adi isminde bir veritabanı dosyası yaratabiliriz.
Daha sonra bu programdan SQL komutları ile bir tablo yaratırız.örnek olarak:
CREATE TABLE tablo_adi (id INTEGER PRIMARY KEY AUTOINCREMENT,txt text); sql kodunu çalıştırısak tablo_adi isminde id ve txt alanlarına sahip bir tablo yaratırız,tablodaki alanların özelliklerini de ayarlaaybiliriz,otomatik artım,integer,float ve diğer veri tipleri string ler….
Tablomuzu da yarattıktan sonra veritabanımızı aktif olarak kullanabiliriz.
Veri tabanına C kodundan bağlanmak için :
function sqlite3 *open_db (const char *tam_db_yolu,int *donus_degeri_pointeri)
{
sqlite3 *db=NULL;
(*donus_degeri_pointeri) = sqlite3_open(tam_db_yolupath,&db);
return db;
}
üstteki kendi yazdığım open_db fonksiyonunu kullanabiliriz.Örneğin :
sqlite3 *db;
int donus_degeri=0;
db = open_db (”/home/ev/test.db”,&donus_degeri);
üstteki kodlar ile veri tabanına bağlandık.Şimdi veri ekleyelim (bir önceki açık db yi kullanacağım) :
char *zErrMsg;
int donus_degeri = 0;
rc = sqlite3_exec(db,”INSERT INTO tablo_adi values(1,’test’);”,callback, 0, &zErrMsg);
bu kodda callback bir fonksiyondur şu anda tam olarak ne için gerekli olduğunu bilmiyorum.
Şimdi de veri tabanından veri okuyalım
char **table;
int nrow,ncolumn;
rc = sqlite3_get_table(db,”SELECT * FROM tablo_adi”,&tablo_degerleri,&nrow,&ncolumn,&zErrMsg);
printf (”1.satir 1.alan = %s 1.satir 2.alan = %s\n”,tablo_degerleri[3],1,tablo_degerleri[4],1);
sqlite3_get_table parametre olrak string dizisi gösteren bir pointer alır ve bu pointera veri tabanından aldığı tablo değerleri dizisinin adresini atar.Böylece bir verilere bu pointer ile erişiriz.Yani veri tabanından aldığımız veriler bize bir string dizisinde döner ve biz bu dizinin elemanlarını dolaşmak sureti ile veriye erişiriz.
sqlite3_free_table(tablo_degerleri);
fonksiyonunu çağırarak sqlite tarafından oluşturulan diziyi temizleriz.Bu memory leak oluşmasını engellemek için gereklidir.Ve yeri geldiğinde yani dizi ile işimiz bittiğinde çağrılamlıdır.
Veri tabanı ile işimiz bittiği zaman veri tabanını kapatmamız gereklidir çünkü veritabanı temelde bir dosya olduğu için programımızın açık dosya tablosunda yer alır ve bunu temizlememiz gereklidir aksi halde programın uzun süre çalıştığı durumlarda açık dosya tablosunun sınırına geliriz ve bir daha veritabanı bağlantısı kuramayız yani kısaca program çakılır.
sqlite3_close(db);
fonksiyonu ile veritabanına kurduğumuz bağlantıyı keseriz.
SQLite gömülü veritabanı bu temel fonksiyonların yanında bir sürü yarımdıcı fonksiyona sahiptir.Bunları öğrenmek istiyorsanız adres : http://www.sqlite.org/capi3ref.html
sqlite3 kütüphanesini kullanabilmek için kaynak kodundan kurulum sırasında oluşan sqlite3.h headerine ve libsqlite3.a kütüphanesine ihtiyaç vardır.
headeri c kodumuza ekleyerek fonksiyonlarımızda sqlite’ın fonksiyonlarını kullanabiliriz.
gcc -c kaynak_kod.c
komutu vererek kaynak_kod.c yi derleyip kaynak_kod.o isminde bir obje dosyası oluştururuz.Programımıza libsqlite3 ün eklenmesi için ise
ld kaynak_kod.o /usr/local/lib/libsqlite3.a -o program-adi
komutunu vermemiz yeterlidir. /usr/local/lib/libsqlite3.a obje dosyalarını tutan kütüphane dosyasıdır ve tam yolu benim bilgisayarımdan aldığım tam yoldur kendi bilgisayarınızda farklı olabilir. ld ile kendi programımızın obje dosyaları ile sqlite kütüphanesini obje dosyalarını birleştirip asıl programımızı yaratırız.
Yukarıdaki ld kaynak_kod.o /usr/local/lib/libsqlite3.a -o program-adi komutunda yer alan libsqlite3.a sqlite’ın statik kütüphane versiyonudur, bunun yerine daha uygun olan dinamik kütüphane versiyonunu kullanabilirsiniz. Bunun için komutu ld -lsqlite3 -o program-adi olarak değiştirmeniz yeterlidir. -l parametresi ile dinamik kütüphanenin adını belirtmiş oluyoruz.
Ayrıca yukarıda 2 adımlı işlem yaptım ama buna gerek yoktu çünkü gcc hem derleme hem de linklemeyi kendisi yapabiliyor. Eğer 2 adımı da GCC ye yaptırmak istersek komut şu şekilde olmalıdır : gcc -o program_adi kaynak_kod.c -lsqlite3
SQLite’ı kendi programlarınızda kullanabilmeniz için size ufak bir yardımcı yazı yazdım umarım işinize yarar.

