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]
addcust = db.proc(“insert into customer values(?, ?)”) { |stmt|
stmt.nrows
}

puts addcust.call(“Test User1”, 9999)
puts addcust.call(“Test User2”, 9998)
puts addcust[“Test User3”, 9997]
[/ruby]
veya daha karmaşık bir örnek yapacak olursak.
[ruby]
invoiceAmount = db.proc(“SELECT Invo.*
FROM Invoice Invo
JOIN Customer Cust ON Cust.Id = Invo.CustomerId
WHERE CustomerName = ?”) { |stmt|
totalAmount = 0
stmt.fetch_all.each { |disconnected_array_row|
totalAmount += disconnected_array_row[3] # 3. sütün fiyat alanıdır.
}
return totalAmount
}

#Uordek adlı customer’ın ne kadar faturası olduÄŸunu yazar.
print “Invoice Amount: ”
puts invoiceAmount[“Uordek”]
[/ruby]

Bir sonraki yazımızda daha detaylı örneklerle görüşmek üzere :)

Kolay gelsin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir