我在尝试通过Java连接到Oracle数据库时,网络适配器无法建立连接。有时,我必须运行几次,然后才停止丢弃错误。
// initializes database connection
private static Connection initializeDatabaseConnection(Properties prop) {
System.setProperty("oracle.net.tns_admin", prop.getProperty("tnsLocation"));
try {
Class.forName("oracle.jdbc.OracleDriver");
}
catch (ClassNotFoundException ex)
{
System.out.println(ex.getMessage());
}
String dbURL = "jdbc:oracle:thin:@" + prop.getProperty("serviceName");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
Connection conn = null;
try {
conn = DriverManager.getConnection(dbURL, username, password);
}
catch (SQLException ex)
{
System.out.println("Error initializing database connection. " + ex.getMessage());
System.exit(1);
}
return conn;
}
关于为什么会随机丢弃该错误的任何想法?我正在使用ojdbc6.jar驱动程序的JDK 1.7。
下载pingplotter并将其打开(使其运行24小时左右)。观看历史图,您可能会发现IP地址掉落或响应时间通过屋顶,同时您无法连接到Oracle。您没有逻辑错误,要么服务器急剧过载,要么您和IT之间都有很大的交通拥堵。您是通过VPN连接吗?
http://www.ppingplotter.com/
或仅在连续模式下使用命令行中的ping一个小时左右:
ping -t <IP address or hostname>
ping绘图仪不会经常ping,并且会创建不错的图形。
如果您远程工作,那么它可能是您的ISP。否则,请与网络管理员或DBA交谈。
显然,您不能以差的DB连接进行生产,因此希望您只能从开发环境中看到这个问题。尝试部署到您计划最终运行应用程序的机器上,看看它是否有所改进。
如果您无能为力使它变得更好,建议您增加您的JDBC驱动程序的初始登录超时。
Google JDBC SetLogIntimeout
这是一个示例,尽管有几种方法可以解决,具体取决于您的驾驶员。
drivermanager getConnection的连接超时