2012-05-02 37 views
0

我正在研究一个功能,我需要检查数据库是否关闭。我必须使用适用于oracle和sqlserver dbs的单一查询。是否有任何单个查询检查数据库是否启动?Oracle和SQL Server数据库的通用查询?

类似于select * from dual;

谢谢!

+0

名为双创建一个表。这是解决方法。 –

+1

如果数据库在检查后立即停止,会发生什么情况?您是否考虑过只是在运行您的查询并捕获抛出的异常? – Pondlife

回答

0

我会去用connection.setAutoCommit(true),而不是一个选择。

0

我认为这将是最好使用连接的功能来检查服务器是否可用。
当连接失败,你可以检查状态,看它是否仍然开放应该有一个例外。

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

希望这是有道理的。

0

更好的办法是获得连接,然后使用类似的产品版本或产品名称数据库的元数据信息,以确保数据库已启动或没有。

如:

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 ... 
} 
0

的java.sql.Connection中有一个方法

isValid(timeOut) 

返回true如果连接尚未关闭并且仍然有效。驱动程序应该提交一个关于连接的查询或者使用一些其他的机制,当这个方法被调用时肯定地验证连接仍然有效。