2012-12-18 123 views
-1

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

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:[微软] [ODBC Excel驱动程序] Microsoft Jet数据库引擎找不到对象

+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. 
     } 
    } 
} 

附:宣布“Exception”是一个糟糕的主意,你应该总是试着从你的方法中抛出最相关的异常。 SQLException在DatabaseUtil.getConnection中更有意义

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

1

你无法避免例外。而是把他们的,你可以通过使用

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

For more info follow this link

1

不能避免抛出SQLException处理它们。 JDBC API不提供测试连接活性的方法。

要测试JDBC连接是否仍然有效,请执行简单查询。这样做的“虚拟查询”习语因数据库而异,但任何表上的任何查询都足以满足要求。如果连接没有活着,你会得到一个异常......你需要处理。

然而是可能的数据库连接到你死之间测试的连接,然后进行你的真实的查询(或其他)。所以(海事组织)你最好只是写你的代码,以便它可以在真正的查询中处理SQLException ......并且不用麻烦探测。这也提供了更好的性能,因为反复测试以查看JDBC连接是否存在将会给应用程序和数据库增加无用的负载。