假设您尝试使用 RSQLite 执行典型的插入或更新循环。我希望以下工作:
library(DBI)
testdb <- dbConnect(RSQLite::SQLite(), "test.sqlite")
dbExecute(testdb, "CREATE TABLE spray_count (spray TEXT, count INTEGER)")
urs <- dbSendStatement(testdb, "UPDATE spray_count SET count = count + :count WHERE spray = :spray")
irs <- dbSendStatement(testdb, "INSERT INTO spray_count VALUES (:spray, :count)")
for (i in 1:nrow(InsectSprays)) {
print(paste("update", i))
dbBind(urs, InsectSprays[i,])
if (!dbGetRowsAffected(urs)) {
print(paste("insert", i))
dbBind(irs, InsectSprays[i,])
}
}
但它没有:
[1] "update 1"
Error in rsqlite_bind_rows(res@ptr, params) :
external pointer is not valid
In addition: Warning message:
Closing open result set, pending rows
基本上,您似乎一次只能有一个准备好的语句,并且创建第二个语句会以某种方式使第一个语句无效。我是否遗漏了什么或者这是 DBI 和/或 RSQLite 的限制?我有 DBI v0.6-1 和 RSQLite v1.1-2。