Android App通过使用JDBC库连接到数据库。 但是DriverManager.getConnection(“ url”)返回null。所以我尝试像这样放置“ try ... catch”:
Connection con = null;
try {
con = DriverManager.getConnection("dummy url");
System.out.println("Connected.");
}catch(ClassNotFoundException ce){
System.out.println("ClassNotFoundException ");
}catch(SQLException se){
System.out.println("SQLException ");
}catch(Exception e){
System.out.println("Exception ");
}finally {
if (con== null) {
System.out.println("Result: null");
}else{
return con;
}
}
输出:
Result: null
如果URL错误,则应将Try ... Catch缓存一些异常。但是它跳过了所有异常,并且getConnection(“ dummy url”)返回null。
尽管我尝试将其更改为真实网址,但是问题没有什么不同。
更新:我修改了一些代码
它仍然无法捕获任何异常
答案 0 :(得分:2)
在con
和try
子句中,在catch
块中声明的finally
变量不在范围内。
该代码唯一可编译的方法是声明了另一个con
变量...可能是封闭类的字段。
这说明了为什么看不到con
且值为null
的原因。您正在打印 other con
变量。
请注意,DriverManager.getConnection(...)
永远不会返回null
。 javadoc声明它返回一个Connection
对象,除此之外没有其他内容。如果该方法可以返回null
,则文档将明确声明。
更新一旦您更正了con
的范围问题。现在可能的问题是您没有捕获到异常。具体来说,它可能是Error
异常,如果在加载(说)适当的JDBC驱动程序类时遇到问题,可能会发生。
更改
}catch(ClassNotFoundException ce){
System.out.println("ClassNotFoundException ");
}catch(SQLException se){
System.out.println("SQLException ");
}catch(Exception e){
System.out.println("Exception ");
到
} catch(Throwable e) {
e.printStackTrace();
}
(如果出于诊断目的捕获异常,则应始终打印或记录堆栈跟踪信息!)