【问题标题】:How to check if a "Send Query" is over?如何检查“发送查询”是否结束?
【发布时间】:2019-10-03 17:26:43
【问题描述】:

我需要检查我来自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 我的系统,对于上面的这个例子,可能有超过 1 个用户同时发生。 然后,当 db 中的第一个连接结束时,我需要完成他的申请并向其他连接提供编写查询的可能性。

【问题讨论】:

  • 我刚刚看到您的编辑,没有收到通知。 -- 当两个用户(进程?线程?)使用这段代码同时访问数据库时会发生什么?
  • @krlmr 现在,当两个用户同时使用数据库时,第二个用户出现错误提示“数据库已锁定”,因为第一个正在使用,我无法检查等待第一个断开连接.

标签: sql r database rsqlite


【解决方案1】:

dbSendQuery() 始终等待完成。您可以致电dbGetRowsAffected(res) 仔细检查。

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

dbConnect()synchronous = "off" 参数用词不当,它定义了数据何时以及如何写入磁盘;这里不涉及多线程。

【讨论】:

  • 这是一个例子,在我的系统中有多个数据库访问。因此,我需要检查发送是否结束。
  • 您能否改写一下,或许可以扩展您的示例以更好地涵盖您的用例?
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2014-12-20
相关资源
最近更新 更多