-2

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;
  }

但它没有处理自定义消息。它抛出错误: java.sql.SQLException: [Microsoft][ODBC Excel Driver] Microsoft Jet 数据库引擎找不到对象

4

3 回答 3

1

你无法避免例外。您可以使用它们来处理它们,而不是扔掉它们

 try{
     // do Something
  } catch(SqlException e){
     // catch exception 
  } finally {
  // do something to get recover 
  }

有关更多信息,请点击此链接

于 2012-12-18T01:56:15.877 回答
1

您无法避免引发 SQLException。JDBC API 不提供测试连接活跃度的方法。

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

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

于 2012-12-18T02:45:34.403 回答
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.
         }
   }
}

PS声明“异常”是个坏主意,您应该始终尝试从您的方法中抛出最相关的异常。SQLException 在 DatabaseUtil.getConnection 中更有意义

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

于 2012-12-18T02:52:38.840 回答