如何使用jdbc连接检查java中的连接状态?

时间:2012-12-18 01:50:09

标签: java ms-access

如何在Msaccess jdbc连接中处理sql异常?我正在使用java中的jdbc连接从msaccess中检索数据。如果连接失败,我需要显示自定义消息而不是抛出异常。

public static Connection getConnection()  {
    Connection connection = null;
    try
    {
        String url = "jdbc:odbc:db1";
        String username = "";
        String password = "";
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        connection= DriverManager.getConnection(url, username, password);
    }
    catch(Exception e)
    {
        System.out.println("Report");
    }
    return connection;
  }

但它没有处理自定义message.its抛出错误: java.sql.SQLException:[Microsoft] [ODBC Excel驱动程序] Microsoft Jet数据库引擎无法找到对象

3 个答案:

答案 0 :(得分:1)

你不能避免例外。您可以使用

处理它们,而不是抛弃它们
 try{
     // do Something
  } catch(SqlException e){
     // catch exception 
  } finally {
  // do something to get recover 
  }

For more info follow this link

答案 1 :(得分:1)

您无法避免抛出SQLException。 JDBC API不提供测试连接活跃性的方法。

要测试JDBC连接是否(仍然)有效,请执行简单查询。执行此操作的“虚拟查询”习惯因数据库而异,但任何表上的任何查询都可以满足要求。如果连接不存在,您将得到一个例外......您需要处理它。

但是在您测试连接然后执行真实查询(或其他)之间,数据库连接可能会死。所以(IMO)你最好只编写你的代码,这样它就可以在真正的查询中处理SQLException ......而且不用费心去探测。这也提供了更好的性能,因为反复测试以确定JDBC连接是否处于活动状态会给应用程序和数据库增加无用的负载。

答案 2 :(得分:1)

您调用getConnection的位置,通过处理异常提供自定义消息:

Connection con = null;
try {
     con = DatabaseUtil.getConnection();
    ...
    ...
}catch(Exception e) {
   //show message, dialog box, whatever
} finally {
   if(con != null) {
         try{
            con.close();
         }catch(SQLException sqe){
              //yet another message, unable to close connection cleanly.
         }
   }
}

P.S。声明“异常”是一个坏主意,你应该总是尝试从你的方法中抛出最相关的异常。 SQLException在DatabaseUtil.getConnection

中更有意义

P.P.S。的Class.forName(驱动器);每个JVM调用只需要一次(用于JDBC驱动程序注册)。因此,注册JDBC驱动程序的适当位置是静态初始化程序(在第一次加载类时调用一次)。