嘿,这是我的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
}
}
答案 0 :(得分:3)
您的问题是,您正在抛出已检查例外。只有当此异常
时才能执行此操作try/catch
- 阻止throws SomeException
向上“抛出”异常。但是,在您的情况下,您将覆盖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
添加到您的方法中。