[英]How to test connection to Oracle Database using Java
有没有办法使用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个生产数据库。
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
}
}
}
}
}
不要重新发明轮子。 Oracle的JDBC驱动程序已经内置了此功能。
这很有用: 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<String> serverNames = new ArrayList<String>();
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)))
我写了一个迷你命令行应用程序,以执行上面的代码示例。
https://github.com/aimtiaz11/oracle-jdbc-tester
保存任何编码的人。 只需构建(使用maven)并运行它。
您可以拥有数据库服务器ips的数组并迭代它们。 对于每次失败的连接尝试,您可以从阵列继续执行下一个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连接字符串 。
为了测试连接,我将创建并使用两种方法:连接到db并测试此连接:
Class Connector {
private static final String CONNECTION_STRING = "jdbc:oracle:thin:@//%s:%d/%s";
private static final String QUERY_IS_CONNECTED = "SELECT * FROM table WHERE field = 'example'";
private static final Log LOG = LogFactory.getLog(Connector.class);
public Connection createConnection() {
Connection connection = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection(String.format(CONNECTION_STRING, "127.0.0.1", "1521", "dbName"), "userName", "password");
} catch (Exception e) {
LOG.error("createConnection: connection error");
}
return connection;
}
public boolean isConnected() {
try (Connection connection = createConnection()) {
if (connection.isClosed()) {
return false;
}
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(QUERY_IS_CONNECTED)) {
if (resultSet == null) {
return false;
}
} catch (Exception e) {
LOG.error("isConnected: Query error", e);
return false;
}
} catch (Exception e) {
LOG.error("isConnected: Check connection error", e);
return false;
}
return true;
}
}
createConnection() - 与数据库的默认连接。 ip,port,dbName,userName和password的值将是您的。
isConnected() - 第一部分检查更正您的连接,第二部分检查使用数据库的正确性。 因为可以有连接,但不能访问请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.