Aylık arşivler: Aralık 2006

Ruby ile Veri Tabanı – 4 (ODBC)

Bir önceki yazımızda artık ODBC modülü ile ilgili birçok sorumuza cevap bulmuştuk. Bu cevaplarla beraber bir iki adet faydalı örnek de vermiştik.

Bugün çalışmalarımızı örnekler üzerine yoğunlaştıralım ve örnekleri detaylı bir biçimde inceleyelim.
Örnek-1
[ruby]require “DbTool.rb”

myDriver = DbTool.new()

myDriver.getDb() do |db|
tableArr = db.tables().fetch_all
tableArr.each do |table|
tblType = table[3]
tblName = table[2]
if tblType != “SYSTEM TABLE” && tblType != “VIEW” && tblName!= “dtproperties” then
count = db.run(“SELECT COUNT(*) FROM dbo.[” + tblName+ “]”).fetch_all
puts “Table = ” + tblName+ “(” + count.to_s + “)”
end
end
tableArr.clear
end[/ruby]
Yukarıda verilen Örnek-1’i incelemeye baÅŸlarsak; Öncelikle
Ruby ile Veri Tabanı – 4 (ODBC) yazısına devam et

Ruby ile Veri Tabanı – 3 (ODBC)

Merhabalar,

Bir önceki yazımızda ODBC nesnelerin temellerinden söz etmiÅŸtik. Bununla beraber çok kullanılan nesnelerin önemli özelliklerini Türkçe’ye çevirmiÅŸtik. Artık geriye sadece ODBC::Statement ve ODBC::ODBCProc’dan bahsetmek ve bir kaç örnek yapmak kaldı.

Statement: Bu sınıf, ODBC modülü içerisinde tüm sorguların sonuçlarını temsil eder. Verilerinin taşındağı her durumda bu sınıf kullanılır. Ä°yi bir hafıza kullanımı için özellikle bu nesnenin ‘close’ ve ‘drop’ methodlarının kullanılması gerekir.
Daha da detaylandırmak istersek; ‘Statement’ nesnesini ‘Connected’ nesne olarak tanımlayabiliriz. Yani veri tabanına baÄŸlı bir nesnedir, veri tabanı ile baÄŸlantı kesilir ise içeriÄŸindeki bilgiler kaybolur. Aynı anda birden fazla baÄŸlı nesne tavsiye edilmemekte ve hatalara neden olmaktadır. Bu nedenle ‘fetch’ methodları ile veriler, veri tabanı baÄŸlantısından bağımsız olarak iÅŸlemlere sokulabilir.

cancel: Yapılmakta olan işlemi iptal eder ve close işlemini uygular.
close: Sınıf üzerindeki değişiklikleri kapatır.
drop: close işlemini gerçekleştirir ve hafızayı boşaltır.
column(n): n. sırada yeralan alanın bilgilerini ODBC::Column tipinde verir.
columns(as_array=false): as_array false ise; Hash tipinde bir dizi döner. Bu Hash’ın key(anahtar) alanı alan adıdır, element(deÄŸer) alanı ODBC::Column tipindedir. as_array true ise, geriye ODBC::Column’lar ile dolu bir dizi döner.
ncols: Kaç adet alan olduğunu belirtir.
nrows: Kaç adet satır olduğunu belirtir.
fetch, fetch_first, fetch_scroll, fetch_many, fetch_all, fetch_hash: Bu methodların hepsi, verilerin bir dizi içerisinde Statement’ın içerisinden çıkarmaya yarar, böylece veri tabanı baÄŸlantısından bağımsız olarak veriler üzerinde iÅŸlemler yapılabilir.
each{|row| block}: Dizilerde bulunan ‘each’ methodu ile aynı anlamda kullanılır, Statement’ın tüm satırlarını tek tek iÅŸlemek için kullanılır. Her satır için fetch iÅŸlemi yapılır.
execute([args…]): Geçilen parametrelerle hali hazırda bulunan Sql cümlesini birleÅŸtirir, oluÅŸan Sql cümlesini icra eder.
run(sql[, args..]): Geçilen sql cümlesi ile, geçilen parametreleri birleştirir, oluşan Sql cümlesini icra eder.
prepapre(sql): Belirtilmiş olan Sql cümlesi ile Statement hazırlanır, Sql cümlesi icra edilmez.

Statement nesnesinide bu şekilde tanımladıktan sonra, sıra sizlere yardımcı olabileceğine inandığım ODBC::Column, ODBC::ODBCProc sınıflarından bahsetmeye geldi.

Column: Sonuçların geldiği veri tabanı alanları ile ilgili olarak detaylı bilgileri barındırır. Örneğin; name, table, length, nullable, searchable, unsigned, precision, scale, type, autoincrement alanları mevcuttur.

ODBCProc: Database::proc methodu ile yaratılabilen bu nesne bizlere büyük esneklikler vaad ediyor aslında. Bu method ile beraber herhangi bir Sql cümleri parametric olarak tanımlanabilir ve birden fazla kez istenildiği şekilde parametreler ile icra edibilir. Şöyleki;
Ruby ile Veri Tabanı – 3 (ODBC) yazısına devam et

Güzel, güneşli bir pazar günü..

Merhabalar,

Bugün çok güneÅŸli, çok güzel bir gündü. DeÄŸil mi ? Öyle idi öyle… Özellikle Asmalı mescit bölgesinde biz biraz üşüsekte asmakilit ile yaptığımız sıcak sohbet bizim ısınmamıza yetti de arttı bile. Ehh bu uzun ve güzel sohbetin sonlarına doÄŸru güneÅŸin kaybolması ile daha sıcak kısımlara geçsek bile, sohbetimizin dozu ve sıcaklığı hiç deÄŸiÅŸmedi, memleketi kurtardık, hastalıkları iyileÅŸtirdik, astıma, kansere, beyin tümörüne ve ‘aynÅŸtayn’ a çaÄŸre bulduk :). Furoyd’dan da bahsetmeyi ihmal etmedik. Felsefe yaptık, felsefe yapmayı tartıştık felsefe yaparken. Unutmadan ülkenin enerji problemlerinden, siyasi çözümlerden bahsettik.. ÅŸimdi düşünüyorum da futboldan konuÅŸmadık :) iyi ki de konuÅŸmadık.

Çok hoÅŸ bir sohbetti, asmakilit‘e kuçak dolusu sevgiler.

Kendinize iyi bakın :)

Ruby ile Veri Tabanı (ODBC) – 2

Merhabalar,

Ä°lk yazımızda Ruby veri tabanı baÄŸlantılarını incelemiÅŸ, bir önceki yazımızda ise ODBC ile veri tabanı baÄŸlantısı gerçekleÅŸtirmiÅŸ ve ufak tefek iÅŸlemler yapmıştık. Åžimdi ise Ruby’de ODBC hakkında daha detaylı bilgiler aktaracağız. Fazla lafı uzatmadan konumuza geçelim. Ön bilgi olarak bu adresden module dökümantasyonuna ulaşılabileceÄŸinizi de belirtmem gerekir.

Ruby ODBC bir modül içerisinde yer alır. Bu modülün adı ODBC’dir ve aÅŸağıdaki kodlar ile kullanılabilir.
[ruby]
require ‘odbc’
# include’u kullandığımızda, ODBC::Driver yerine Driver kullanabiliriz.
include ODBC
[/ruby]
Bu ana modül içerisinde connection_pooling, datasources, drivers gibi methodların yanı sıra date, time alanları ile ilgili methodlar da mevcuttur. Bu methodların tanımlarını Türkçe’ye çevirmek gerekir ise;
datasources: Bilinen veri kaynaklarının isimlerini dizi olarak verir.
drivers: Bilinen veri sürücülerinin isimlerini dizi olarak verir.
error: Son hata mesajını barındırır.
info: Son uyarı mesajını barındırır.
clear_error: Son hata ve uyarı mesajlarını temizler.
raise: ODBC::Error sınıfından bir hata’yı fırlatmak için kullanılır. (throw)
newenv: Yeni bir bağlantı ortamı döner.
connection_pooling: Tüm işlem bazında bağlantılar havuzunun oluşturulup oluşturulmayacağını belirtir.
connect: dns, user ve password bilgileri ile veri tabanına bağlanır ve gereye bu veri tabanını gösteren bir ODBC::Database nesnesi döner.

İncelemekte olduğumuz ODBC modülü içerisindeki sınıf yapısı şu şekildedir.
Ruby ODBC Sınıf yapısı
Åžekilden de anlaşılacağı gibi, ‘Object’ sınıfı ODBC modülünde temel sınıf olarak görev yapmaktadır. Error ve ODBCProc’u bu yapının dışında tutulmuÅŸtur. Environment, Database ve Statement arasında bir miras alma iliÅŸkisi mevcuttur.

Temel sınıflara deyinecek olursak;
Environment: Veri tabanına baÄŸlanılacak olan ortamı temsil eder. Kısaca ODBC::Database nesnelerini gruplamak için kullanılır. Buna ek olarak Transaction iÅŸlemlerini yönetmek gibi bir görevi de vardır. Methodlarını Türkçe’ye çevirmek gerekir ise;
commit: Başlatılmış olan işlem kümesini olumlu sonuçlandırır ve kayıt işlemi yapar.
rollback: Başlatılmış olan işlem kümesini olumsuz sonuçlandırır ve kayıt işlemlerini iptal eder, yapmaz.
transaction: İşlem kümesini başlatır. Herhangi bir kod bloğu alarak çalışır, kod bloğunda bir hata olursa rollback işlemini gerçekleştirir, kod bloğu içerisinde herhangi bir hata oluşmaz ise, commit işlemi gerçekleştirilir.

Database: Veri tabanını temsil eder. Tüm veri tabanı iÅŸlemleri bu sınıf üzerinde yapılabilir. Tüm veri geri dönen methodları ODBC::Statement geri döner. Ãœzerinde bir çok method bulunur, bu methodlardan önemli olanları Türkçe’leÅŸtirmek gerekir ise;
connected?: Bağlı olup olmadığı bilgisi.
drvconnect(drv): Bağlantı esnasında kullanılanılacak Driver(sürücü) bilgisi.
disconnect(no_drop=false): BaÄŸlantıyı sonlandırır, eÄŸer no_drop true verilir ise, bu nesne kullanılarak yaratılmış olan tüm ODBC::Statement‘lar drop edilmeden baÄŸlantı kesilir. DiÄŸer durumda tüm aktif ODBC::Statement‘lar drop edilir.
newstmt: Herhangi bir SQL hazırlamadan veya çalıştırmadan yeni bir ODBC::Statement verir. Bu iÅŸlem ile ODBC:Statement.set_option kullanarak özel opsiyonlarla herhangi bir SQL cümlesini çalıştırmanıza olanak verir. Bu method’un dışında boÅŸ ve veri tabanına baÄŸlı ODBC::Statement elde etmenin herhangi bir yolu yoktur.
tables([pattern]), columns, indexes, primary_keys, foreign_keys, table_privileges, procudures, special_columns, get_info: Bu method’lar isimlerinden de anlaşılacağı gibi, veri tabanında verinin saklanması ile ilgili bir takım özel alanları bize verirler. Tüm method’lar geriye bir ODBC::Statement döner.
run(sql[,args…]): Verilen sql cümlesini, ‘args’ parametreleri ile hazırlar ve çalıştırır, dönüş deÄŸerini bir ODBC::Statement ile bize verir. ‘Select’ cümleleri için idealdir.
do(sql[,args…]): Sql cümle hazırlanması ‘run’ ile aynıdır, fakat geriye sadece kaç adet kayıtın etkilendiÄŸini belirten bir sayı döner. Özellikle ‘Insert’, ‘Update’, ‘Delete’ cümleleri için tasarlanmıştır.
prepare(sql): Sql cümlesini içeren bir ODBC::Statement geri döner.
get_option(option), set_option(option, intval): Veri tabanın opsiyonlarına, ayarlana erişim sağlar. Tüm optiyonların listesi şu şekildedir; SQL_AUTOCOMMIT, SQL_CONCURRENCY, SQL_QUERY_TIMEOUT, SQL_MAX_ROWS, SQL_MAX_LENGTH, SQL_NOSCAN, SQL_ROWSET_SIZE, SQL_CURSOR_TYPE.
autocommit[=option]: İşlem kümelerinin otomatik doğrulanıp ve kayıt edilmesine olanak verir. Destekleyen veri tabanlarında.
drop_all: Kendisinden alınmış olan tüm açık ODBC::Statement’ları düşürür.

Bir sonraki yazımızda, bu tanımları örneklerle beraber açıklayacağım.

Kolay gelsin.