DriverManager.getConnection(“ url”);无法捕获任何异常

时间:2019-06-17 05:03:55

标签: java jdbc

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。

尽管我尝试将其更改为真实网址,但是问题没有什么不同。

更新:我修改了一些代码

  1. 在final范围内添加条件
  2. 将声明转换为scrope。

它仍然无法捕获任何异常

1 个答案:

答案 0 :(得分:2)

contry子句中,在catch块中声明的finally变量不在范围内。

该代码唯一可编译的方法是声明了另一个con变量...可能是封闭类的字段。

这说明了为什么看不到con且值为null的原因。您正在打印 other con变量。


请注意,DriverManager.getConnection(...)永远不会返回nulljavadoc声明它返回一个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();
  }

(如果出于诊断目的捕获异常,则应始终打印或记录堆栈跟踪信息!)