Android SQLite数据库onCreate()中的Rethrow异常

时间:2012-07-18 14:27:16

标签: java android database sqlite create-table

嘿,这是我的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 个答案:

答案 0 :(得分:3)

您的问题是,您正在抛出已检查例外。只有当此异常

时才能执行此操作
  1. try/catch - 阻止
  2. 直接捕捉和处理
  3. 或通过向method-signature添加throws SomeException向上“抛出”异常。
  4. 但是,在您的情况下,您将覆盖onCreate() - 方法,该方法(在基类中)不会抛出已检查的异常。因此,您无法覆盖该方法并在签名中添加throws,因为这不再是覆盖。

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

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

    有关例外(投掷和捕获)的更多信息,请参阅我的博文:Catching practice

答案 1 :(得分:1)

public void onCreate(SQLiteDatabase db) throws Exception {//arg0?

编辑:谢谢,抛出*。

答案 2 :(得分:1)

更改

public void onCreate(SQLiteDatabase db) {

public void onCreate(SQLiteDatabase db) throws Exception{

答案 3 :(得分:1)

throws Exception添加到您的方法中。