Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jdbc连接检查java中的连接状态?_Java_Ms Access - Fatal编程技术网

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

如何使用jdbc连接检查java中的连接状态?,java,ms-access,Java,Ms Access,如何处理Msaccess jdbc连接中的sql异常?我正在使用java中的jdbc连接从msaccess检索数据。如果连接失败,我需要显示自定义消息,而不是引发异常 public static Connection getConnection() { Connection connection = null; try { String url = "jdbc:odbc:db1"; String username = "";

如何处理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驱动程序]Microsoft Jet数据库引擎找不到对象

您无法避免异常。您可以使用

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

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

为了测试JDBC连接是否(仍然)有效,您需要执行一个简单的查询。用于执行此操作的“虚拟查询”习惯用法因数据库而异,但对任何表的任何查询都已足够。如果连接未激活,则会出现异常。。。这是你需要处理的


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

调用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.
         }
   }
}
另外,声明“异常”是个坏主意,您应该始终尝试从您的方法中抛出最相关的异常。SQLException在DatabaseUtil.getConnection中更有意义


p.p.S.品名(司机);每次JVM调用只需要一次(用于JDBC驱动程序注册)。因此,注册JDBC驱动程序的合适位置是在静态初始值设定项中(第一次加载类时会调用一次)。

您是否尝试捕获异常?