(Ruby + SQLite3) / DBI でエラー(DBI::InterfaceError)

状況説明

>gem install sqlite3-ruby
Select which gem to install for your platform (i386-mswin32)
1. sqlite3-ruby 1.2.5 (x86-mingw32)
2. sqlite3-ruby 1.2.5 (x86-mswin32)
3. sqlite3-ruby 1.2.5 (ruby)
4. sqlite3-ruby 1.2.4 (ruby)
5. Skip this gem
6. Cancel installation
Install required dependency mocha? [Yn] y
Install required dependency rake-compiler? [Yn] y
Install required dependency rake? [Yn] y
Install required dependency hoe? [Yn] y
Install required dependency rubyforge? [Yn]
Install required dependency json_pure? {Yn] y
・・・

  • require 'sqlite3'し、SQLite3::Database.new('test.db')とすると、正常にデータベースにアクセスできる。しかし、require 'dbi'し、DBI.connect( 'DBI:SQLite3:test.db')では、 DBI::InterfaceError となってしまう。

d:/ruby-186-26/lib/ruby/site-ruby/1.8/dbi.rb:329:in `load_driver': Unable to load driver 'SQLite3' (DBI::InterfaceError)
from d:/ruby-186-26/lib/ruby/site_ruby/1.8/dbi.rb:227:in `_get_full_driver'
from d:/ruby-186-26/lib/ruby/site_ruby/1.8/dbi.rb:213:in `connect'
・・・

調査結果

  • One-click Installer の ReleaseNotes.txtを見ると、DBIが0.1.1と古く、dbd-sqlite3がインストールされていない。

Ruby Installer for Windows
Ruby Version 1.8.6
Installer Version 186-26
------------------------------
RELEASE NOTES
------------------------------

Contents: Version:
-------- --------
            <省略>
RubyDBI 0.1.1
DBD/ODBC 0.9995

対策

  1. 元々インストールされているDBDとdbiディレクトリ名、ファイル名を変更する。
  2. 次に、gemにてdbd-sqlite3をインストールする。

>gem install dbd-sqlite3
Install required dependency dbi? [Yn] y
Install required dependency deprecated? [Yn] y
・・・

これで、DBI.connect( 'DBI:SQLite3:test.db')で、データベースにアクセスできるようになった。つまり、DBIからSQLite3を使用可能となった。