1

嘿,这是我创建新数据库时当然会调用的 SQLiteDatabase 的 onCreate 方法。我想抓住任何问题并记录下来,然后重新抛出它以便在上面处理。但是编译器不允许我重新抛出异常,抱怨它没有被处理。这是在写着“throw e;”的那一行。

@Override
public void onCreate(SQLiteDatabase db) {//arg0?
    db.beginTransaction();
    try {
        Checklist.createTable(db);
        Item.createTable(db);
        db.setTransactionSuccessful();
    } catch (Exception e) {
        Log.e(KnowUrStuffApp.TAG,"KusDBHelper.onCreate: " + e.getLocalizedMessage());           
        db.endTransaction();
        throw e;//SYNTAX ERROR: Unhandled Exception Type Exception
    }
}
4

4 回答 4

3

你的问题是,你抛出了一个检查异常。仅当出现此异常时才能执行此操作

  1. 直接被try/catch-block捕获和处理
  2. throws SomeException或者通过添加到您的方法签名“向上”抛出异常。

但是,在您的情况下,您将覆盖onCreate()-method,该方法(在基类中)不会引发检查异常。因此,您不能覆盖该方法并添加throws到签名中,因为那将不再是覆盖。

你可以做的是,RuntimeException向上抛出一个,它不需要添加到方法签名中:

Log.e(KnowUrStuffApp.TAG,"KusDBHelper.onCreate: " + e.getLocalizedMessage());           
db.endTransaction();
throw new RuntimeException(e); // Add the checked exception as the cause!

有关异常(抛出和捕获)的更多信息,请参阅我的博客文章:捕获实践

于 2012-07-18T14:43:15.257 回答
1
public void onCreate(SQLiteDatabase db) throws Exception {//arg0?

编辑:谢谢,抛出*。

于 2012-07-18T14:28:18.967 回答
1

改变

public void onCreate(SQLiteDatabase db) {

public void onCreate(SQLiteDatabase db) throws Exception{
于 2012-07-18T14:29:56.750 回答
1

添加throws Exception到您的方法中。

于 2012-07-18T14:30:27.727 回答