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用クラスです。
ir | 実行結果 正常時:0 、失敗時:0以外 |
ardt | 結果の取得データ 二次元配列となります。 |
arcmn | 結果取得データのカラム名 配列となります。 |
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"
UPDATE テーブル名 SET カラム名1=値1, カラム名2=値2, ..... WHERE 条件式
UPDATE テーブル名 SET (カラム名1, カラム名2, .......) = (値1, 値2, .......) WHERE 条件式
すべてのカラムに値をセット
INSERT INTO テーブル名 VALUES (値1, 値2, .......)
カラムを指定して値をセット
INSERT INTO テーブル名 (カラム名1, カラム名2, .......) VALUES (値1, 値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"
履歴