7

我不明白为什么编译器没有警告我不要捕获或抛出SQLException. 情况如下:

我已经定义了这个接口:

public interface GenericDatabaseManager {
    public void createTables(DataBase model) throws SQLException;
}

然后我创建了这个实现给定接口的类:

public class SqliteHelper extends SQLiteOpenHelper implements
        GenericDatabaseManager {

    @Override
    public void createTables(DataBase model) throws SQLException {
        // Code that throws SQLException
    }

最后我从这里调用这个 SqliteHelper.createTables() :

public class DatabaseManager extends CoreModule {
    private boolean createUpdateDB(final String dbString, final String appId) {
        // Previous code...

        if (oldVer == -1) {
            dbCoreModel.addModel(dbModel);
            dbCoreModel.getManager().createTables(dbModel);
            return true;
        }

        // More code...
    }

}

dbCoreModel.getManager()返回一个GenericDatabaseManager实例。但是编译器在线显示没有错误dbCoreModel.getManager().createTables(dbModel);,尽管这一行抛出一个SQLException.

有谁知道为什么会这样?提前致谢。

编辑: aboutSQLException不需要被抓住,因为它是一个RuntimeException. 这不是真的。这是一个例子:

import java.sql.SQLException;

interface Interface {
    public void throwsSQLException() throws SQLException;
}

class Test implements Interface {

    @Override
    public void throwsSQLException() throws SQLException {
        throw new SQLException();
    }
}

public class Main {

    public static void main(String[] args) {
        Interface i = new Test();
        i.throwsSQLException();
        System.out.println("Finished");
    }

}

i.throwsSQLException();在这种情况下,编译器会显示错误。

4

1 回答 1

13

android.database.SQLException是运行时异常。

In java it is not necessary to catch or declare throws for runtime exceptions. Read a detailed description about RuntimeExceptions in java here

于 2012-11-22T09:54:19.543 回答