在R中如何同时使用DBI + RSQLite的多个预处理语句?

时间:2017-05-29 12:07:54

标签: r rsqlite r-dbi

假设您尝试使用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。

0 个答案:

没有答案