如何将列添加到活动的android数据库表?

时间:2014-04-28 09:58:18

标签: android sqlite activeandroid

我正在使用Active Android来在我的Android应用中执行sqllite操作。以下是模型类。

@Table(name="books")
public class Books extends Model {
@Column(name = "bookId")
public String bookId;
@Column(name = "bookName")
public String bookName;
}

我想为此添加一个新列。所以我按照Active Android's Schema Migration Doc上的说明进行操作。

一个。更新了AA_DB_VERSION

湾在assets/migrations

中添加了一个新的sql文件

然后,当我运行我的应用程序时,我得到以下异常

1553-1553/com.hannan.delivery E/SQLiteLog﹕ (21) API called with NULL prepared statement
1553-1553/com.hannan.delivery E/SQLiteLog﹕ (21) misuse at line 63241 of [00bb9c9ce4]
java.lang.RuntimeException: Unable to create application com.hannan.delivery.MyApplication: android.database.sqlite.SQLiteException: not an error (code 0)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4154)
        at android.app.ActivityThread.access$1300(ActivityThread.java:130)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
        ....
 Caused by: android.database.sqlite.SQLiteException: not an error (code 0)
        at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
        at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727)
        at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
        at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
        at com.activeandroid.DatabaseHelper.executeSqlScript(DatabaseHelper.java:180)
        at com.activeandroid.DatabaseHelper.executeMigrations(DatabaseHelper.java:150)
        at com.activeandroid.DatabaseHelper.onUpgrade(DatabaseHelper.java:74)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
        at com.activeandroid.Cache.openDatabase(Cache.java:102)
        at com.activeandroid.Cache.initialize(Cache.java:75)
        at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:44)
        at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:34)
        at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:30)
        at com.activeandroid.app.Application.onCreate(Application.java:25)
        at com.hannan.delivery.MyApplication.onCreate(MyApplication.java:51)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
        ...

这是MyApplication的创建方法,它失败了。

@Override
public void onCreate() {
    super.onCreate();
    ActiveAndroid.initialize(this);
}

迁移脚本是:(2.sql)

ALTER TABLE books ADD COLUMN bookAuthor TEXT;

请建议我为什么会收到此错误。

3 个答案:

答案 0 :(得分:1)

我遇到了这个问题,并意识到如果你在错误的位置运行带有升级sql文件的应用程序ONCE,那么数据库已经被升级了#34;任何后续尝试使其工作都将被忽略(因为数据库版本已经增加)。您可以通过将数据库版本降低到原始值来查看是否是这种情况,启动时会出现错误,说它无法降级。

将版本号最多3个,并将sql文件重命名为3.sql,使其正常运行。

如果sql文件运行时出现问题,不确定是否会出现这种情况,只是认为在排除故障时对某人有用。

答案 1 :(得分:0)

尝试将此列添加到sqlite表

ALTER TABLE books ADD bookAuthor TEXT ;

此查询应该在

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

导致oncreate fires仅在app第一次运行时才会出现。 onupgrade在版本更改时触发。所以只需更改版本&把它放在onUpgrade上并尝试。

答案 2 :(得分:0)

这个答案可能对您有所帮助:

https://stackoverflow.com/a/27222137/858418

您可能需要确保迁移文件以0.sql开头。

此外,请确保您的0.sql位于app / src / main / assets / migrations下。