バリケンのRuby日記 RSSフィード

2007-03-21

[][] SQLite3のデータベースファイルを利用  SQLite3のデータベースファイルを利用 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  SQLite3のデータベースファイルを利用 - バリケンのRuby日記  SQLite3のデータベースファイルを利用 - バリケンのRuby日記 のブックマークコメント

このあいだのサンプルでは、データベースとしてメインメモリを利用していたから、スクリプトが終了するとデータが消えてしまうよ。ちょっとテストスクリプトを書くために利用するなら便利だけど、本格的にデータを保存するなら、ちゃんとハードディスクとかに書き込みたいよね。

SQLiteでは、データベースファイルを利用することでデータベースハードディスクに記録することができるよ。

データベースファイルの利用はとってもカンタンこのあいだの例の「:dbfile => ':memory:'」となっていたところを「:dbfile => 'ファイル名'」とするだけでいいみたい。読み込むファイルカレントディレクトリに置いてね。その名前のファイル存在しないときは、新しく作ってくれるみたいだよ。

じゃあ、実際にデータベースファイルを作ってみて、スクリプト終了後もデータベースの内容が保持されることを実験してみるよ。

require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :dbfile  => 'testdb_sqlite3.db'
)

class InitialSchema < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :name, :string, :limit => 20, :null => false
      t.column :password, :string, :limit => 20, :null => false
    end
  end

  def self.down
    drop_table :users
  end
end

InitialSchema.migrate(:up)

class User < ActiveRecord::Base
end

User.create(
  :name        => 'username1',
  :password    => 'password1'
)

User.create(
  :name        => 'username2',
  :password    => 'password2'
)

User.create(
  :name        => 'username3',
  :password    => 'password3'
)

これを実行すると、カレントディレクトリに「testdb_sqlite3.db」というファイルができていることを確認してね。

次に、このデータベースファイルからデータを取り出してみるよ。

require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :dbfile  => 'testdb_sqlite3.db'
)

class User < ActiveRecord::Base
end

User.find(:all).each{|i| puts "#{i.name}: #{i.password}" }

実行結果だよ。

username1: password1
username2: password2
username3: password3

これで、電源を切ってもデータを保存しておけるようになるね。

あと昨日もちょっと書いたけど、SQLiteにはバージョン2系列とバージョン3系列があって、データベースファイルの形式に互換性がないから注意してね。バージョン2系列のSQLiteで作ったデータベースファイルをバージョン3系列で読んだり、その逆をしたりといったことはできないよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070321