-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

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呼び出しごとに1回だけ必要です(JDBCドライバー登録の場合)。したがって、JDBCドライバーを登録する適切な場所は、静的初期化子(クラスが初めてロードされるときに1回呼び出される)です。

于 2012-12-18T02:52:38.840 に答える
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 に答える