sqlite3-ruby で自動的に文字コードを変換

入出力で毎回文字コードを変換するのが面倒だったから。

#!/usr/local/bin/ruby -Ks

require 'sqlite3'
require 'sqlite3/driver/native/driver'
require 'kconv'

class MyDriver < SQLite3::Driver::Native::Driver
	def bind_text( stmt, index, value, utf16=false )
		super( stmt, index, value.to_s.kconv( Kconv::UTF8, Kconv::SJIS ), utf16 )
	end
	
	def column_text( *args )
		super.kconv( Kconv::SJIS, Kconv::UTF8 )
	end
end

begin
	db = SQLite3::Database.new( 'test.db', :driver => MyDriver )
	db.execute( 'SELECT id, content FROM testtable WHERE content = ?', 'こんにちは!!' ) do |row|
		puts '%d : %s' % row
	end
ensure
	db.close if db
end

こんなんでどうだろう