如何使用Java测试与Oracle数据库的连接

有没有办法使用Java测试我与oracle数据库的连接? 这是我的代码。

public class OracleConnection { public static void main(String[] args) throws Exception { //connect to database Class.forName("oracle.jdbc.driver.OracleDriver"); String serverName = "00.000.0.000"; String portNumber = "1521"; String sid = "My Sid"; String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; String username = "UNAME"; String password = "PASSWORD"; Connection conn = DriverManager.getConnection(url, username, password); } } 

我想要做的是测试数据库是否可以访问,如果不可以,那么程序将连接到下一个数据库。 我有8个生产数据库。

不要重新发明轮子。 Oracle的JDBC驱动程序已经内置了此function。

这很有用: http : //www.orafaq.com/wiki/JDBC

 import java.util.ArrayList; import java.sql.*; public class OracleConnection { public static void main(String[] args) throws Exception { //connect to database Class.forName("oracle.jdbc.driver.OracleDriver"); ArrayList serverNames = new ArrayList(); serverNames.add("yourhostname1"); serverNames.add("yourhostname2"); serverNames.add("yourhostname3"); serverNames.add("yourhostname4"); String portNumber = "1521"; String sid = "ORCLSID"; String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)(FAILOVER=ON)" ; for (String serverName : serverNames) { url += "(ADDRESS=(PROTOCOL=tcp)(HOST="+serverName+")(PORT="+portNumber+"))"; } url += ")(CONNECT_DATA=(SID="+sid+")))"; String username = "USERNAME"; String password = "PASSWORD"; // System.out.println(url); // for debugging, if you want to see the url that was built Connection conn = DriverManager.getConnection(url, username, password); } } 

上面的代码实际上构建并使用看起来像这样的url(如下例所示)。 我通过取消注释代码末尾附近的调试行明确地得到了这个:

 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST= (LOAD_BALANCE=ON)(FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname1)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname2)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname3)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname4)(PORT=1521)) )(CONNECT_DATA=(SID=ORCLSID))) 

DriverManager#getConnection它自己尝试建立与给定数据库URL的连接。 DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。 和thorws SQLException如果发生数据库访问错误。

您可以测试连接是否有效Connection#isValid(int timeout)如果连接尚未关闭且仍然有效,则返回true。

 ... Connection conn = DriverManager.getConnection(url, username, password); boolean reachable = conn.isValid(10);// 10 sec 

用于检查与Oracle DB的连接的简单Java代码:

 import java.sql.*; public class Test { private final static String DB_URL = "jdbc:oracle:thin:@//192.168.1.105:1521/MYORA"; private final static String USER = "myuser"; private final static String PASS = "mypwd"; public static void main(String[] args) { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { // ignore } } } } } 

您可以拥有数据库服务器ips的数组并迭代它们。 对于每次失败的连接尝试,您可以从arrays继续下一个ip并再试一次。 如果连接成功,则在那里断开循环并使用已建立的当前连接。

也许你应该ping服务器的IP地址。 您应该检查一下: Ping函数返回所有ping的IP地址都可以访问

您可以从DriverManager.getConnection()捕获SQLException并查找ORA-12543 。
阅读有关供应商代码的SQLException文档。

 Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(“url”,”username”,”password ″); 

在这里看看更多: http : //leezk.com/tag/jdbc

…如果不是,那么程序将连接到下一个… ”我想知道包含多个服务器地址的集群连接字符串是否适合您。 (我自己也没试过。)查看RAC环境的Oracle连接字符串 。

我写了一个迷你命令行应用程序,以执行上面的代码示例。

https://github.com/aimtiaz11/oracle-jdbc-tester

保存任何编码的人。 只需构建(使用maven)并运行它。