読者です 読者をやめる 読者になる 読者になる

SQLite3-Ruby で deprecated と警告された件の対処

programming ruby

昨日のエントリ から、SQLite3-Ruby のダイナミックリンクライブラリは deprecated なので Native なドライバを使わないといけないということがわかりました。つかちゃんとエラーメッセージ読めよ>自分。
いろいろ調べてみると、Windows の場合コンパイル済みの Native なドライバが含まれている RubyGems パッケージ(ファイル名に mswin32 とかついてるやつ)を

から取ってきてインストールしてから、

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'sqlite3'
=> true
irb(main):003:0> db = SQLite3::Database.new('test.db')
=> #<SQLite3::Database:0x3a79628 @translator=nil, @type_translation=false, @driv
er=#<SQLite3::Driver::Native::Driver:0x3a79588 @authorizer={}, @callback_data={}
, @trace={}, @busy_handler={}>, @statement_factory=SQLite3::Statement, @results_
as_hash=false, @handle=#<SWIG::TYPE_p_sqlite3:0x3a71130>, @transaction_active=fa
lse, @closed=false>
irb(main):004:0> db.execute('create table hoge(id number)')
=> []
irb(main):005:0> db.execute('insert into hoge values(1)')
=> []
irb(main):006:0> db.execute('select * from hoge')
=> [["1"]]
irb(main):007:0> db.close
=> true

とかすると自動で Native なドライバが使われて OK のようです。Unix系なら gem install sqlite3-ruby としたときに自動でコンパイルされると思われます(未確認)。
この際、手動で(RubyGems経由でなく)インストールした SQLite3-Ruby が残っていて、そちらに Native ドライバが入っていなかったりするとエラーになるため、削除しておく必要があります。