以下のコードを実行すると、配列の「タスク」は、データベース内の各行に対して繰り返されるdbi呼び出しの同じ最後の行になります。
require 'dbi'
require 'PP'
dbh = DBI.connect('DBI:SQLite3:test', 'test', '')
dbh.do("DROP TABLE IF EXISTS TASK;")
dbh.do("CREATE TABLE TASK(ID INT, NAME VARCHAR(20))")
# Insert two rows
1.upto(2) do |i|
sql = "INSERT INTO TASK (ID, NAME) VALUES (?, ?)"
dbh.do(sql, i, "Task #{i}")
end
sth = dbh.prepare('select * from TASK')
sth.execute
tasks = Array.new
while row=sth.fetch do
p row
p row.object_id
tasks.push(row)
end
pp(tasks)
sth.finish
したがって、TASKテーブルに2つの行がある場合、これをタスク配列に取得する代わりに、次のようにします。
[[1, "Task 1"], [2, "Task 2"]]
私はこれを手に入れます
[[2, "Task 2"], [2, "Task 2"]]
完全な出力は次のようになります。
[1, "Task 1"]
19877028
[2, "Task 2"]
19876728
[[2, "Task 2"], [2, "Task 2"]]
私は何が間違っているのですか?