使用动态 RJDBC 连接创建 R Shiny 应用程序

Create R Shiny app with dynamic RJDBC connection

我想从 R Shiny 包中找到与 reactiveFileReader 函数类似的函数,以使用 RJDBC 驱动程序从 Oracle 数据库动态读取数据。

请在下面找到一个例子来解释我的问题:

假设 my_data.csv 是我的 MY_ORACLE_TABLE(托管在我的 oracle 数据库上)的提取。

在下面的第一种情况下,当我手动更改 my_data.csv 的值时,我的 Shiny 应用会自动更新:

server <- function(input, output) {
  output$table1 <- DT::renderDataTable({

    reactiveFileReader(1000,session = NULL,filePath = "my_data.csv",readFunc = read.csv2)()     

    })

}

但在下面的第二种情况下,假设 MY_ORACLE_TABLE 更新,我必须重新加载我的 Shiny 应用程序 URL 以更新显示:

server <- function(input, output) {
  output$table1 <- DT::renderDataTable({

    reactive({dbGetQuery(con, "SELECT * FROM MY_ORACLE_TABLE})()      

    })

}

有什么建议吗?

问题在于

dbGetQuery(con, "SELECT * FROM MY_ORACLE_TABLE")

不依赖于任何反应上下文,并且不会在数据库中的某些内容发生变化时自动重新运行。

一种解决方案是将您的查询包装在 shiny::reactivePoll() 中,它实际上用于实现 shiny::reactiveFileReader()

有关详细信息,请参阅:

https://shiny.rstudio.com/reference/shiny/1.0.3/reactivePoll.html