未捕获/抛出异常没有编译器错误/警告

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 异常。

有人知道为什么会发生这种情况吗?提前感谢。

编辑: 关于不需要捕获 SQLException 因为它是一个 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();出错。

问“之前的代码......”是否包含try {以及“更多的代码......”是否包含} catch (SQLException e) {是没有意义的,对不对? :D - Costi Ciudatu
2
然后,当PC回答时,你没有使用java.sql.SQLException,而是android.database.SQLException。检查你的import - Costi Ciudatu
1个回答

13

SQLException不是运行时异常。 - m0skit0
6
android.database.SQLException 是一个运行时异常,而 java.sql.SQLException 则不是。 - Kai
这个问题涉及到 android.database.SQLException 而不是 java.sql.SQLException - PC.
问题或答案没有说明SQLException是关于什么的。 - Damian Leszczyński - Vash
@onof 我正在使用Android JUnit。 - m0skit0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接