3

在 R 中,我正在使用以下函数,该函数在该函数中使用 3 或 4 个数据库操作。但是显示如下错误消息:

Error in sqliteExecStatement(conn, statement, ...) : 
  RS-DBI driver: (RS_SQLite_exec: could not execute1: database is locked)

我需要在我的代码中进行哪些修改?我的代码如下:

library('RSQLite')
test <- function(portfolio,date,frame){
  lite <- dbDriver("SQLite", max.con = 25)
  db <- dbConnect(lite, dbname = "portfolioInfo1.db")
  sql <- paste("SELECT *  from ", portfolio," where portDate='", date, "' ", sep = "")
  res <- dbSendQuery(db, sql)
  data <- fetch(res)
  frame1 <- data.frame(portDate=date,frame)

 lite <- dbDriver("SQLite", max.con = 25)
 db <- dbConnect(lite, dbname = "portfolioInfo1.db")
  sql <- paste("delete from ", portfolio," where portDate='", date, "' ", sep = "")
 res <- dbSendQuery(db, sql)

  lite <- dbDriver("SQLite", max.con = 25)
  db <- dbConnect(lite, dbname = "portfolioInfo1.db")
  dbWriteTable(db,portfolio,frame1,append=TRUE,row.names=FALSE) 
}
tick <- c("AAPL","TH","YHOO")
quant <- c("121","1313","131313131")
frame <-data.frame(ticker=tick,quantities=quant)
#print(frame)
test("RUSEG","2006-02-28",frame)
4

3 回答 3

8

似乎您多次连接到同一个数据库而没有断开连接。如果建立连接以防止其他人编辑已被编辑的数据库,则数据库可能会进入锁定状态。

每次连接后断开连接,或者只连接一次,执行所有查询,然后最终断开连接。

于 2013-04-09T11:31:45.457 回答
1

更准确地说,多个进程可以同时读取一个 SQLite 数据库文件,但一次只能写入一个进程:SQLite 文档、文件锁定

于 2019-01-31T14:12:12.937 回答
1

在我的情况下,我使用 DB Browser 添加表。我没有保存更改,这就是为什么尝试在 RStudio (Shiny) 中连接不起作用的原因。

于 2019-10-01T13:10:44.713 回答