如何防止 RMySQL 错误并在 Shiny 中显示给用户?

How can I prevent RMySQL errors and show to user in Shiny?

我有一个闪亮的应用程序,可以像这个例子一样对 MySQL 数据库执行查询:

UI

textAreaInput("query")

服务器

data <- reactive({
  df<-dbGetQuery(conection, input$query)
  return(df)
})

问题在于,当用户在 textAreaInput 中键入错误的语法时,Shiny App 会关闭并且错误会显示在 R 控制台中。

我想要的是在应用程序中打印该错误,以便用户可以重试并编写另一个查询。

有人可以帮我吗?

我们可以使用tryCatch。这是基于@Fan Li 的回答的完整示例

library(RSQLite)
con <- dbConnect(SQLite(), dbname="sample.sqlite")
dbWriteTable(con, "test", data.frame(value1 = letters[1:4], value2 = letters[5:8]))
dbDisconnect(con)

library(shiny)
library(RSQLite)
runApp(list(
  ui = bootstrapPage(
    #select * from te fail
    #select * from test work
    textAreaInput("query",'Query'),
    actionButton("action", label = "Run Query"),
    hr(),
    tableOutput("table")
  ),
  server = function(input, output){
    #Reactive is eager by definition and it will signal unreal/annoying errors, hence I used eventReactive
    data <- eventReactive(input$action,{
      tryCatch({
        con <- dbConnect(SQLite(), dbname="sample.sqlite")
        data<-dbGetQuery(con, input$query)
        dbDisconnect(con)
        return(data)
        }, 
               error = function(e){
                 showModal(
                   modalDialog(
                     title = "Error Occurred",
                     tags$i("Please enter valid query and try again"),br(),br(),
                     tags$b("Error:"),br(),
                     tags$code(e$message)
                   )
                 )
               })
    })
    output$table <- renderTable(data())
  }))