使用动态 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
我想从 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