[英]Resume code after catching exception
如果我的代码捕获到异常,我试图返回false,但是似乎捕获到异常时停止。
这是我的代码:
第一种方法
while ((reachable == false) && (cnt <= 2)) {
serverName = FPRODDB[cnt][0];
sid = FPRODDB[cnt][1];
url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
conn = DriverManager.getConnection(url, username, password);
reachable = TestDB(conn);
JOptionPane.showMessageDialog(null,
"Testing Connection: " + String.valueOf(cnt) );
cnt ++;
}
第二种方法:TestDb方法,将其放入可达变量中。
public boolean TestDB(Connection conn) throws Exception{
try {
if (conn ==null || conn.isClosed()) {
return false;
}else {
return true;
}
} catch (Exception e){
return false;
}
}
编辑:这是我的错误
java.sql.SQLException: The Network Adapter could not establish the connection
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:480)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:413)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at digicare.tracking.serial.BulkUpload.DatabaseConnection.OracleConnection.GetDB(OracleConnection.java:45)
at digicare.tracking.serial.BulkUpload.DatabaseConnection.OracleConnection.main(OracleConnection.java:13)
at digicare.tracking.serial.BulkUpload.UploadProgress$1read2.run(UploadProgress.java:108)
at java.lang.Thread.run(Unknown Source)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:328)
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:421)
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:630)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:206)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:966)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:292)
... 10 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:127)
at oracle.net.nt.ConnOption.connect(ConnOption.java:126)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:306)
可能是引发异常的是DriverManager.getConnection。 因为现在编写代码,所以您只捕获conn.isClosed()引发的异常。
因为在您的try catch块之前,发生了一个Exception,并且try catch块根本无法捕获任何Expcetion,可能是您想捕获while循环内的代码,因为如果您给了getConnection方法,则getConnection方法总是抛出Exception。网址,端口,用户名或密码错误
我通过在上面添加一个try块来使其工作
conn = DriverManager.getConnection(url, username, password);
在第一种方法上。 它看起来像这样:
try {
conn = DriverManager.getConnection(url, username, password);
reachable = TestDB(conn);
} catch (Exception e) {
reachable = false;
}
这是因为错误不是第二种方法。 错误是连接的声明。
我同意彼得·劳瑞(Peter Lawrey。)的观点,您是否尝试在调试模式下运行并检查了TestDB方法中发生的异常情况?
您还可以在catch块中使用stacktrace并在此处共享完整的堆栈跟踪吗?
顺便说一句,您是否在第一种方法中处理异常,而while循环所属的方法?
首先纠正您的if条件
if (conn ==null || conn.isClosed())
这样
if (conn !=null && conn.isClosed())
如果conn.isClosed()
为null,则if语句可能会引发错误。
但是,您有捕获异常并尝试return;
而不是return false;
您可以将stackTrace放入,以便可以确定确切的错误。
您是否尝试过删除Throws Exception ?
更改
public boolean TestDB(Connection conn) throws Exception{
至
public boolean TestDB(Connection conn){
您可以使用此语句,而不用编写许多行。
try{
return !conn.isClosed(); //true if open
}catch(Exception e){
return false; //is false if nullPointerException is thrown (that mean conn is null)
}
这将简化代码。 最后,我认为您应该使用包含所有代码的大型try-catch,因此所有内容均经过异常检查
while ((reachable == false) && (cnt <= 2)) {
serverName = FPRODDB[cnt][0];
sid = FPRODDB[cnt][1];
url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
try{
conn = DriverManager.getConnection(url, username, password);
reachable = TestDB(conn);
JOptionPane.showMessageDialog(null,
"Testing Connection: " + String.valueOf(cnt) );
cnt ++;
}catch(Exception e){
// tell the user, or handle it
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.