【问题标题】:Generic query for both oracle and sql server databases?oracle 和 sql server 数据库的通用查询?
【发布时间】:2012-05-02 10:37:01
【问题描述】:

我正在开发一个需要检查数据库是否已关闭的功能。我必须使用适用于 oracle 和 sqlserver dbs 的单个查询。是否有任何单个查询可以检查 db 是否已启动?

类似于select * from dual;

谢谢!

【问题讨论】:

  • 创建一个名为 dual 的表。这是解决方法。
  • 如果数据库在您检查后立即宕机会怎样?您是否考虑过只运行查询并捕获抛出的任何异常?

标签: java sql-server oracle


【解决方案1】:

我会选择connection.setAutoCommit(true),而不是选择。

【讨论】:

    【解决方案2】:

    我认为最好使用连接的功能来检查服务器是否可用。
    连接失败应该有Exception,你可以检查状态看看它是否仍然打开。

    为了满足您的特定需求,如果您决定继续查询。
    这不是最佳做法
    我不知道一种简单的方法来做你想做的事,Oracle 和 SQL 不共享系统对象的相同命名。但运行该命令,它不适用于 SQL,但异常不会是“服务器已关闭”类型,您可以在 try/catch 中使用它。
    这不是最佳做法

    希望它有意义。

    【讨论】:

      【解决方案3】:

      更好的方法是获取连接,然后使用产品版本或产品名称等数据库元数据信息来确保数据库是否启动。

      例如:

      try{ 
        Con = DriverManager.getConnection(databaseURL,username,password);
        databasemetadata = con.getMetaData();
        String databaseName = databasemetedata.getDatabaseProductName();
       If(databaseName.equals("<desireddabase>"))
        {
           //database up and running
        }
      }
       catch(Exception e)
      {
        // error in connection ... 
      }
      

      【讨论】:

        【解决方案4】:

        java.sql.Connection 有一个方法

        isValid(timeOut)
        

        如果连接尚未关闭并且仍然有效,则返回 true。当调用此方法时,驱动程序应提交有关连接的查询或使用某种其他机制来肯定地验证连接仍然有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-25
          • 2011-09-05
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多