r-DBI::dbSendQuery因SQL SERVER的RJDBC::JDBC而失败



当我使用odbc驱动程序运行insert语句时,一切都很好。

drv <- odbc::odbc()
conn <- createConn(drv, trusted_connection = T, dsn="mydsn", uid="myuid", pwd="mypwd")
DBI::dbSendQuery("INSERT INTO "dbo"."testjdbc" (d) values('4')")

当我使用jdbc运行select语句时,一切都很好:

drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\mssql-jdbc-7.0.0.jre8.jar") 
conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
DBI::dbGetQuery(conn, "Select * from dbo.mytable")

并且jdbc的连接是有效的:

drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\mssql-jdbc-7.0.0.jre8.jar") 
conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
DBI::dbIsValid(conn) # TRUE

但是,当我尝试使用jdbc驱动程序插入语句(与第一个相同(时,如下所示:

drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\mssql-jdbc-7.0.0.jre8.jar") 
conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
DBI::dbSendQuery(conn, "INSERT INTO "dbo"."testjdbc" (d) values('4')")

然后我得到错误:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
Unable to retrieve JDBC result set for INSERT INTO "dbo"."testjdbc" (d) values('4') (The statement did not return a result set.)

因此jdbc选择是可以的,但插入、更新和删除会产生错误,而使用odbc我可以做任何事情。

解决方案是不使用DBI::dbSendQuery而是使用RJDBC::dbSendUpdate运行插入。

感谢@Mark Rotteveel的回复。多亏了你,我找到了解决办法。

相关内容

  • 没有找到相关文章

最新更新