今回サンプルとして利用するテーブルは以下の通り。
db = SQLite3::Database.new("test.db")
db.execute(<<EOS
CREATE TABLE IF NOT EXISTS Vocaloid
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name CHAR UNIQUE NOT NULL,
Ver INTEGER NOT NULL
);
EOS
)
普通にexecuteする
毎度SQL文を組み立て、executeする。
SQLインジェクション対策を全て手動で行わなければならない為、非効率。
db.execute(<<EOS
INSERT INTO Vocaloid
(Name, Ver)
VALUES ('miku', 2 )
)
引数を渡し、executeする
引数に?に対応する値を順番に渡す。
quote等も自動的に処理してくれる模様。
sql = <<EOS
INSERT INTO Vocaloid
(Name, Ver )
VALUES (?, ?)
EOS
db.execute(sql, "miku", 2)
ハッシュ引数を渡し、executeする
sql = <<EOS
INSERT INTO Vocaloid
(Name, Ver )
VALUES (:Name, :Ver)
EOS
db.execute(sql, :Name => "miku", :Ver => 2)
prepareを利用する
SQL文をテンプレートとして用意しておいて、execute時に変数として渡す。
pre = db.prepare(<<EOS
INSERT INTO Vocaloid
(Name, Ver)
VALUES (?, ? )
)
pre.execute("miku", 2)
pre.execute("rin", 2)
pre.execute("meiko", 1)
prepareでハッシュ引数を使う
pre = db.prepare(<<EOS
INSERT INTO Vocaloid
(Name, Ver)
VALUES (:Name, :Ver)
EOS
)
pre.execute(:Name=>"miku", :Ver=>2)
pre.execute(:Name=>"rin", :Ver=>2)
pre.execute(:Name=>"meiko", :Ver=>1)
・参考
http://sqlite-ruby.rubyforge.org/sqlite3/faq.html
http://sqlite-ruby.rubyforge.org/classes/SQLite/Database.html
0 件のコメント:
コメントを投稿