Acch. This seems simpler:
require “sqlite3”
db = SQLite3::Database.new “my_db1.db”
rows = db.execute <<END_OF_CREATE
CREATE TABLE IF NOT EXISTS my_statistics(
Key varchar(30),
First_time_val int,
Second_time_val int,
Last_time_val int
);
END_OF_CREATE
COLUMN_NAMES = {
1 => “First_time_val”,
2 => “Second_time_val”,
3 => “Last_time_val”,
}
define_method(:update_db) do |data, data_set_count| #ruby 2.0+
if data_set_count == 1
my_insert = db.prepare(
“INSERT INTO my_statistics
(Key, #{COLUMN_NAMES[data_set_count]})
VALUES(?, ?)”
)
data.each do |name, num|
my_insert.execute name, num
end
else
my_update = db.prepare <<-END_OF_UPDATE
UPDATE my_statistics
SET #{COLUMN_NAMES[data_set_count]} = ?
WHERE Key = ?;
END_OF_UPDATE
data.each do |name, num|
my_update.execute(num, name)
end
end
end
data = {
“Ruby” => 5,
“Rails” => 9,
“Rspec” => 13,
}
update_db(data, 1)
data.update({
“Ruby” => 8,
“Rails” => 7,
“Rspec” => 8,
})
update_db(data, 2)
data.update({
“Ruby” => 7,
“Rails” => 2,
“Rspec” => 17,
})
update_db(data, 3)