当我执行下面的代码时,我的数组“任务”最终会得到与数据库中每一行重复的 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 表中有两行,那么不要在任务数组中获取它:
[[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"]]
我究竟做错了什么?