如何检查“发送查询”是否已完成?

5

我需要检查我的dbSendQuery()返回的res是否已经完成。

我的代码如下:

db <- dbConnect(drv=SQLite(),flags=SQLITE_RW,dbname="db.sqlite",synchronous = "off")
dbBegin(db)
res <- dbSendQuery(db,"Update Operation SET Name = 'teste' where Id = 1")
if("my SendQuery is over"){
  dbClearResult(res)
  dbCommit(db)
  dbDisconnect(db)
}

我需要知道何时结束后,才能提交并断开连接。
更新1: 在我的系统中,对于以上示例可能会发生多个用户同时连接的情况。因此,当第一个数据库连接结束时,我需要完成其请求,并提供给其他连接编写查询的可能性。

我刚看到你的编辑,没有收到通知。-- 当两个用户(进程?线程?)同时使用此代码访问数据库时会发生什么? - krlmlr
@krlmr 目前,当两个用户同时使用数据库时,第二个用户会出现错误提示“数据库已锁定”,因为第一个用户正在使用,而我无法检查等待第一个用户断开连接。 - Walercy Rodrigues de Oliveira
1个回答

3

dbSendQuery() 总是等待完成。您可以通过调用 dbGetRowsAffected(res) 来进行双重检查。

对于仅运行副作用且不返回值的 SQL 语句,首选使用 dbSendStatement()

dbConnect() 的参数 synchronous = "off" 是一个名字不正确的说法,它定义了数据何时以及以何种方式写入磁盘; 这里没有涉及多线程。


1
这是一个例子,在我的系统中有多个对数据库的访问。因此我需要检查发送是否完成。 - Walercy Rodrigues de Oliveira
2
你能否重新表达一下,并且扩展一下你的例子以更好地涵盖你的用例? - krlmlr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接