我不明白为什么编译器没有警告我未捕获或抛出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 Ciudatujava.sql.SQLException
,而是android.database.SQLException
。检查你的import
。 - Costi Ciudatu