我正在尝试在我的Android Java应用程序中的onUpgrade()上执行此操作:

try {
    db.execSQL("SELECT fechacontrol from parametres", null);
} catch(Exception e) {
    e.printStackTrace();
    db.execSQL("ALTER TABLE parametres ADD COLUMN fechacontrol BIGINT");
}


我的问题是,列fechacontrol存在,但是我总是以异常块结尾,然后应用程序由于列名重复而崩溃。
我究竟做错了什么?

谢谢大家

最佳答案

由于绑定参数为null,execSQL(anything, null)将抛出IllegalArgumentException。这就是为什么您总是以catch结尾。在不使用bindargs的情况下执行SQL有execSQL(String)重载。

但是,不应该这样进行数据库升级。模式版本号存储在数据库文件中,您可以在onUpgrade()中将其作为参数获取。使用该信息推断需要更新的内容。

08-15 19:02