テクセル

Ruby用SQLiteライブラリ(Windows用)


sqlite3.rbは、Ruby用SQLiteライブラリです。本ライブラリの実行には、sqlite3.dll(32ビット用)を必要とします。 sqlite3.rbとsqlite3.dllは、同じフォルダに入れてください。

使用したrubyのバージョン ruby 2.7.2p137 RubyInstaller 32ビット
使用した sqlite3.dll のバージョン 3.26.0
sqlite3.rb(Ver.1.24)のダウンロード(sqlite3_v124.7z)

Sqlite3クラス Sqlite3用クラスです。

クラスメソッド

open(sfilename)
SQLiteデータベースファイルを開きます。指定されたファイルが存在しない場合は、新規に作成されます。
sfilename
SQLiteデータベースファイル名
戻り値
正常時:0 、失敗時:0以外 エラーコード一覧、-1:他のプログラムで使用中
close
SQLiteとの接続を閉じます。
戻り値
正常時:0 、失敗時:0以外
exec(ssql)
SQL文の実行を行います。
ssql
SQL文
戻り値
3変数よりなります。
ir 実行結果 正常時:0 、失敗時:0以外
ardt 結果の取得データ 二次元配列となります。
arcmn 結果取得データのカラム名 配列となります。
prepare(sSql)
プリペアステートメントのコンパイルを行います。
sSQL
コンパイルするステートメント
戻り値
正常時:SQLITE_OK(0) 、失敗時:0以外
reset
プリペアステートメントをリセットします。
戻り値
正常時:SQLITE_OK(0) 、失敗時:0以外
bind_int(ino, iv)
bind_int64(ino, ilv)
bind_double(ino, dv)
bind_text(ino, sv)
プリペアステートメントへの値のバインディングを行います。
ino
SQLパラメータのインデックスを指定します。1~
iv, ilv, dv, sv
バインドする値を指定します。
戻り値
正常時:SQLITE_OK(0) 、失敗時:0以外
step
SQLステートメントの評価を行います。
戻り値
実行が正常に完了:SQLITE_DONE(101)
新しい行が準備された:SQLITE_ROW(100)
データベースファイルがロックされた:SQLITE_BUSY(4)
それ以外は、エラー
column_count
プリペアステートメント実行結果の項目数を取得します。
戻り値
項目数(整数)
column_int(ino)
column_int64(ino)
column_double(ino)
column_text(ino)
プリペアステートメントの実行結果値を取得します。
ino
実行結果値のインデックスを指定します。0~
戻り値
結果値(整数、64bit整数、浮動小数、文字列)
column_name(ino)
プリペアステートメント実行結果の項目名を取得します。
ino
項目のインデックスを指定します。0~
戻り値
項目名(文字列)
column_type(ino)
プリペアステートメント実行結果項目の型を取得します。
ino
項目のインデックスを指定します。0~
戻り値
SQLITE_INTEGER(1),SQLITE_FLOAT(2),SQLITE_TEXT(3),SQLITE_BLOB(4),SQLITE_NULL(5)
finalize
プリペアステートメントオブジェクトを削除します。
戻り値
正常時:SQLITE_OK(0) 、失敗時:0以外
errmsg
エラーメッセージを取得します。
戻り値
エラーメッセージ(文字列)
libversion
sqlite3.dllのバージョン情報を取得します。
戻り値
バージョン情報(文字列)

使用例1

exec関数を使用した例


# -*- coding: utf-8 -*-
require "./sqlite3"

class Sqlite < Sqlite3

   def execSQL(sSQL)

      ir,ardt,arnm = exec(sSQL)
      if ir != 0
         sa = "sqlite SQL error¥r¥n" + errmsg + "¥r¥n[" + sSQL + "]¥r¥n"
         print sa
         close
         exit
      end
      return ir,ardt,arnm
   end

end

sqlite = Sqlite.new(__ENCODING__)

ir = sqlite.open("sqldb1.db")
if ir != 0
   print "open失敗¥r¥n"
   exit
end

sr = sqlite.libversion
print "sqlite3.dllバージョン:" + sr + "¥r¥n"

sSQL = "CREATE TABLE IF NOT EXISTS tbl5 (" +
       "id int primary key," +
       "cnote text)"
ir,ardt,arnm = sqlite.execSQL(sSQL)

sSQL = "SELECT max(id) FROM tbl5"
ir,ardt,arnm = sqlite.execSQL(sSQL)
id = 0
if ardt[0][0] != nil
   id = ardt[0][0].to_i
end
id += 1

sSQL = "INSERT INTO tbl5 VALUES (" + id.to_s + ",'123abc日本①Ⅱ')"
ir,ardt,arnm = sqlite.execSQL(sSQL)

sSQL = "SELECT * FROM tbl5 ORDER BY id DESC LIMIT 5"
ir,ardt,arnm = sqlite.execSQL(sSQL)
ardt.each{|rc|
  print rc[0] + "," + rc[1] + "¥r¥n"
}

ir = sqlite.close
print "end"
   

■ SQLメモ

1) UPDATE

UPDATE テーブル名 SET カラム名1=値1, カラム名2=値2, ..... WHERE 条件式

UPDATE テーブル名 SET (カラム名1, カラム名2, .......) = (値1, 値2, .......) WHERE 条件式

2) INSERT

すべてのカラムに値をセット
INSERT INTO テーブル名 VALUES (値1, 値2, .......)

カラムを指定して値をセット
INSERT INTO テーブル名 (カラム名1, カラム名2, .......) VALUES (値1, 値2, .......)

使用例2

プリペアステートメントを使用した例


# -*- coding: utf-8 -*-
require "./sqlite3"

sqlite = Sqlite3.new(__ENCODING__)

ir = sqlite.open("sqldb1.db")
if ir != 0
   print "open失敗¥r¥n"
   exit
end

sSQL = "SELECT max(id) FROM tbl5"
ir,ardt,arnm = sqlite.exec(sSQL)
id = 0
if ardt[0][0] != nil
   id = ardt[0][0].to_i
end
id += 1

sSQL = "INSERT INTO tbl5 VALUES (?, ?)"
ir = sqlite.prepare(sSQL)
ir = sqlite.reset

ir = sqlite.bind_int(1, id)
ir = sqlite.bind_text(2, "123abc文字 " + Time.now.to_s)

ir = sqlite.step
if ir == Sqlite3::SQLITE_DONE
   print "書き込み完了¥r¥n"
else
   print "書き込みエラー:" + ir.to_s + "¥r¥n"
end

sSQL = "SELECT * FROM tbl5 WHERE id > ?"
ir = sqlite.prepare(sSQL)
ir = sqlite.reset

ir = sqlite.bind_int(1, (id - 5))

while true do
   ir = sqlite.step
   if ir == Sqlite3::SQLITE_ROW
      id1 = sqlite.column_int(0)
      sr = sqlite.column_text(1)
      print id1.to_s + "," + sr + "¥r¥n"
   else
      break
   end
end

ir = sqlite.finalize
ir = sqlite.close
print "end"
   

履歴

2021.06 Ver.1.24 メソッドexecで値がヌルの場合「nil」を返すように修正
2021.05 Ver.1.23 メソッドexecの不具合修正
2019.01 Ver.1.22 moduleのdlload変更
2018.06 Ver.1.21 moduleのdlload変更
2016.11 Ver.1.20 プリペアステートメント対応
2013.07 Ver.1.10 メソッドexec仕様変更、gettable,getcolname,getdata廃止
2013.06 Ver.1.01 取得データのエンコーディング変更、ruby2.0対応
2013.03 Ver.1.00
Rubyユーティリティ
©2013-2022 TEXCELL CORPORATION
テクセル株式会社