在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)
答案 0 :(得分:6)
您似乎无需断开连接就可以多次连接到同一个数据库。如果建立连接以阻止其他人编辑已经编辑的数据库,则数据库可能会进入锁定状态。
每次连接后断开连接,或者只连接一次,执行所有查询,最后断开连接。
答案 1 :(得分:1)
在我的情况下,我正在使用数据库浏览器添加表。我没有保存更改,这就是为什么尝试在RStudio(Shiny)中进行连接不起作用的原因。
答案 2 :(得分:0)
更精确地说,多个进程可以同时读取一个SQLite数据库文件,但是一次只能写入一个进程:SQLite documentation, File Locking