android - 如何将列添加到 Activity 的 android 数据库表中?

标签 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 的 Create 方法失败的地方。

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

迁移脚本是:(2.sql)

ALTER TABLE books ADD COLUMN bookAuthor TEXT;

请就我收到此错误的原因提出建议。

最佳答案

我遇到了这方面的问题,并意识到如果您使用错误位置的升级 sql 文件运行应用程序一次,数据库已经“升级”并且任何后续尝试让它工作都将被忽略(因为数据库版本已经递增)。您可以通过将数据库版本降低回原始值来查看是否是这种情况,您将在启动时收到错误消息说无法降级。

将版本号提高到 3 并将 sql 文件重命名为 3.sql 使其正常运行。

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

关于android - 如何将列添加到 Activity 的 android 数据库表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338005/

相关文章:

java - ActiveAndroid SQLite 异常 'No such table'

javascript - 在启动时加载外部链接的 Phonegap 应用程序 - Android

android - 如何将数据绑定(bind)到 android 4.0 中的编辑文本和微调器

android - 尝试绘制网格最终绘制长矩形

c - 我应该如何调整 SQLite 以获得最小延迟?

jquery - Rails - 嵌套表单 - 随机化用户发布的所有单个字段

iphone - 试图在 iPhone 应用程序更新中覆盖 sqlite 数据库

Android Linearlayout拼接

具有 Activity android 的 Android 应用程序在启动时关闭

android - Active Android 是否容易受到 SQL 注入(inject)。任何已知的解决方案?