数据库被锁定在R中

时间:2013-04-09 11:21:41

标签: sql r sqlite

在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)

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

在我的情况下,我正在使用数据库浏览器添加表。我没有保存更改,这就是为什么尝试在RStudio(Shiny)中进行连接不起作用的原因。

答案 2 :(得分:0)

更精确地说,多个进程可以同时读取一个SQLite数据库文件,但是一次只能写入一个进程:SQLite documentation, File Locking