人気ブログランキング | 話題のタグを見る

sqlite3-ruby

Rails 2.0.2 のデフォールトのデータベースは sqlite3 だ。SQLite について Wikipedia を見たら、いろいろと面白い特徴があるらしい。第1はサーバではなくライブラリであること。サーバーにアクセスして使うのではなく、アプリケーションから直接実行できるのだ。第2はデータベースファイルが単一ファイルであること。パソコンからのデータの持ち出しが簡単にできる。この2点だけでも何とも嬉しいアプリケーションなのだ。

何かに使えそうだと考えてみたら、sqlite3 には、sqlite3-ruby というアダプタが存在するので、snrb でこれを require すれば、本格的なデータベースが snrb 上で実行できてしまう。これは、ちょっとうれしいので、さっそく Windows にインストールしてみることにした。

まず、SQLite のホームページから、sqlitedll-3_6_3.zip をダウンロードしてきて、解凍した二つのファイルを C:\Windows\system32 に入れた。次に RubyForge から、sqlite3-ruby-1.2.0-msvcrt-bin.zip をダウロードして解凍し、解凍されたフォルダ上でコマンドプロンプト上で ruby install.rb をした。

さっそく snrb 改め srb で(入力行の値の出力を行う srb はほとんど使わなかったので、snrb をsrb に改名してしまった。)実行したのが次の実行例だ。

C:\Users\******\Ruby>ruby srb.rb
srb> require 'sqlite3'
srb> db = SQLite3::Database.new('sample.db')
srb> ;
ml*> sql = <<SQL
ml*> create table the_table(
ml*>   name varchar(10),
ml*>   age integer,
ml*>   sex varchar(1)
ml*> );
ml*> SQL
ml*> ;
srb> db.execute(sql)
srb> db.execute("insert into the_table values('spiderman', 24, 'm')")
srb> db.execute("insert into the_table values('wonderwoman', 27, 'f')")
srb> p db.execute("select * from the_table")
[["spiderman", "24", "m"], ["wonderwoman", "27", "f"]]
srb> db.close
srb> exit

これで、対話型 Ruby 環境で本格的なリレーショナルデータベースが使えるようになった。何だかすごくうれしい。


おまけ(Windows用 snrb 改め srb)
ファイル名: srb (open, eval は全角英数に変換して使用)

require 'readline'
include Readline

module Srb
  def Srb.edit(prog = nil)
    if prog != nil
      File.open('temp.txt','w') {|f| f.write(prog)}
    end
    system "notepad temp.txt"
    prog = IO.read('temp.txt')
    system "del temp.txt"
    prog
  end
  
  def Srb.save(path, var)
    File.open(path, 'w') {|f| f.write(var)}
  end

  def Srb.load(path)
    IO.read(path)
  end
end

def _ml
  prog = ""
  while true
    line = readline('ml*> ', true)
    break if line == ";"
    prog << line + "\n"
  end
  return prog
end

loop do
  begin
    _line = readline('srb> ', true)
    if _line == ";"
      then _line = _ml
    end
    eval(_line, TOPLEVEL_BINDING)
  rescue SyntaxError, LoadError, StandardError
    STDERR.puts "Warning: #$!"
  end
end
by tnomura9 | 2008-10-06 19:49 | Ruby | Comments(0)
<< sqlite-ruby for... 考えるということ >>