20 Ekim 2016 Perşembe

Ruby ile Mysql Veritabanına Bağlanma ve Temel DML İşlemleri | Ahmet Melih Başbuğ Personal Blog Page!

Link: Ruby ile Mysql Veritabanına Bağlanma ve Temel DML İşlemleri | Ahmet Melih Başbuğ Personal Blog Page!


Selamlar. Bu yazımda Ruby ile Mysql veritabanına bağlanma ve temel işlemleri yapma örneği ile karşı karşıya kaldık.


İlk olarak ruby için mysql kütüphanelerini kuruyoruz. İşletim sistemimiz Ubuntu'dur. Ruby on Rails kullanmayacağım. Canım istemiyor. Ubuntu üzerinde editör ile ruby kodlarımı ve mysql bağlantımı yapacağım. Kütüphane kurulumu için önce;

$> sudo apt-get install ruby-mysql

Sonra gem ile mysql yüklenir. Ruby için gem'e yükleniyor sanırsam.

$> gem install mysql
Fetching: mysql-2.9.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed mysql-2.9.1
Parsing documentation for mysql-2.9.1
Installing ri documentation for mysql-2.9.1
Done installing documentation for mysql after 1 seconds
1 gem installed

Sonra gelin el ele verip bir mysql veritabanı oluşturalım.

mysql> create database ruby
mysql> use ruby

mysql> create table members (
    id int(5),
    name VARCHAR(25)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected (0,06 sec)

mysql> insert into members VALUES (1,'Ahmet Melih');
Query OK, 1 row affected (0,00 sec)

mysql> insert into members VALUES (2,'Mustafa Kerem');
Query OK, 1 row affected (0,00 sec)

mysql> insert into members VALUES (3,'TarıkÇ.');
Query OK, 1 row affected (0,00 sec)

mysql> insert into members VALUES (4,'Erdem');
Query OK, 1 row affected (0,00 sec)

Evet şimdi geldik işin cancanlı kısma. Kod yazacağız. Bu verileri select komutu ile ruby kodlaması sonucunda çıktıda gösterelim. Bunun için ruby kütüphanesi kullanılacak ve mysql veritabanı adı, kullanıcı adı ile parolası girilecek. require 'mysql' ile kütüphane belirtilir sonra Mysql.new(hostname, username, password, databasename) ile mysql bağlantısı sağlanır. İşe biraz cafcaflı işlemler katmak için kodda herhangi bir Mysql hatası alındığında durumunda hata kodunu ekrana basma kodlarını da ekledim. rescue kısımda, oluşan hatayı yakalayıp ekrana basacaktır. 

$< vim membershow.rb

Dosya içinde;

#!/usr/bin/ruby

require 'mysql'

begin
   #my = Mysql.new(hostname, username, password, databasename)
   con = Mysql.new('localhost','root','roone y','ruby')
   rs = con.query('select * from members')
   rs.each_hash { |h| puts h['name'] }

rescue Mysql::Error => e
   puts "Error code: #{e.errno}"
   puts "Error message: #{e.error}"
   puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
   con.close if con
end

Sonuç:
$> ruby membershow.rb
Ahmet Melih
Mustafa Kerem
TarıkÇ.
Erdem

Şimdi DML sorgularının nasıl çalıştığını gösterelim. Önce çıktımıza 'Ali Veli' ekleyelim. Sonra bu eklediğimizi silip, üzerine 'Erdem' ismini 'Erdem Başgan' olarak düzenleyelim. Bunun için aynı veritabandaki sql sorguların gibi sql sorgumuzu query() içine yazacağız.

$> vim membershow.rb

Dosya içinde

require 'mysql'

begin
   #my = Mysql.new(hostname, username, password, databasename)
   con = Mysql.new('localhost','root','roone y','ruby')
   rs = con.query('select * from members')
   rs.each_hash { |name| puts name['name'] }

   con.query("INSERT INTO members(name) VALUES ('Ali Veli')");
   puts "Yeni Eklenen Sonucu:\n";
   rs = con.query('select * from members')
   rs.each_hash { |name| puts name['name'] }
   con.query("DELETE from members where name='Ali Veli'");
   con.query("UPDATE members set name='Erdem Başgan' where name='Erdem'");
   puts "Güncelleme Sonucu:\n";
   rs = con.query('select * from members')
   rs.each_hash { |name| puts name['name'] }

rescue Mysql::Error => e
   puts "Error code: #{e.errno}"
   puts "Error message: #{e.error}"
   puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
   con.close if con
end

Sonuç:
$> ruby membershow.rb
Ahmet Melih
Mustafa Kerem
TarıkÇ.
Erdem
Yeni Eklenen Sonucu:
Ahmet Melih
Mustafa Kerem
TarıkÇ.
Erdem
Ali Veli
Güncelleme Sonucu:
Ahmet Melih
Mustafa Kerem
TarıkÇ.
Erdem Başgan
Bu mysql veritabanının ruby üzerinde basit bir erişimi ve kullanımı örneği idi. Daha fazla complex ve sql injection'a karşı önlemler alınan kodlar için daha fazla araştırma yapın. Haydi sağlıcakla.