我希望使用
dbExecute()
应该有效。否则,
dbSendStatement()
上的文档
dbGetQuery
此方法仅适用于SELECT查询
为了查看可用的功能,可以执行以下操作:
ls('package:DBI')
.根据文件:
dbExecute
:
对于大多数后端),调用dbSendStatement(),然后
dbGetRowsAffected(),确保结果始终为free-d by
dbClearResult()。
dbSendStatement
dbSendStatement()方法仅提交并同步执行
受影响的行,对返回的结果对象调用dbGetRowsAffected()。
您应该总是更喜欢dbExecute()。
编辑:
这些方法可能适用于的其他实现
DBI
RJDBC
未来无论如何,看起来他们已经实施了
dbSendStatement()
dbSendQuery()
,因此它们不会用于此目的。
框架
dbSendUpdate()
dbSendQuery和dbSendUpdate向数据库提交SQL查询。这个
两者之间的区别只是dbSendUpdate与DBML一起使用
查询,因此不返回任何结果集。
在另一个DBMS上使用类似查询确认:
dbSendStatement(conn,'SET search_path=public;')
#Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
#Unable to retrieve JDBC result set for SET search_path=public; (No results were returned by the query.)
traceback()
#7: stop(..., " (", .jcall(x, "S", "getMessage"), ")")
#6: .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",
# statement)
#5: .local(conn, statement, ...)
#4: dbSendQuery(conn, statement, ...)
#3: dbSendQuery(conn, statement, ...) ## this is the problem
#2: dbSendStatement(conn, "SET search_path=public;")
#1: dbSendStatement(conn, "SET search_path=public;")
dbSendUpdate(conn, 'SET search_path=public;')
# successful
dbCommit(conn)
# persist the change past the current session (RJDBC seems to give you transaction control here)