如何在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数据库引擎无法找到对象
答案 0 :(得分:1)
你不能避免例外。您可以使用
处理它们,而不是抛弃它们 try{
// do Something
} catch(SqlException e){
// catch exception
} finally {
// do something to get recover
}
答案 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驱动程序的适当位置是静态初始化程序(在第一次加载类时调用一次)。