【问题标题】:Changed DB, updated DB version can't add data and can't not add data更改数据库,更新数据库版本无法添加数据无法添加数据
【发布时间】:2015-07-31 05:28:00
【问题描述】:

我正在开发一个使用两个数据库的 android 应用程序。最近,我不得不向其中一个数据库添加一个新列。这样做后,它破坏了我的数据库。在我的设备上安装和重新安装应用程序没有任何效果,我还更新了数据库版本。

尝试插入数据会让我出现这个错误:

E/SQLiteLog﹕ (1) table message_table has no column named msg_type

所以,我尝试从插入中取出“msg_type”列,并插入给我这个错误的数据:

E/SQLiteLog﹕ (1299) abort at 8 in [INSERT INTO message_table(recipient,message) VALUES (?,?)]: NOT NULL constraint failed: message_table.msg_typeTEXT

这里是oncreate:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" +
            COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + //msg_id
            COL_2 + " TEXT NOT NULL, " + //recipient
            COL_3 + " TEXT, " + //message
            COL_4 + "TEXT NOT NULL);"); //message type
}

和插入类:

public boolean addMessage(String recipient, String message, String type){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();

    //populate message object
    contentValues.put(COL_2, recipient);
    contentValues.put(COL_3, message);
    contentValues.put(COL_4, type);

    //insert new message
    long result = db.insert(TABLE_NAME, null, contentValues);

    //check if operation was successful
    if(result == -1)
        return false;
    else
        return true;
}

在这两种情况下,我怎么会收到错误消息?我认为它无法识别新列是从第一个错误中添加的,但它也不喜欢不接收该列的数据。

【问题讨论】:

    标签: java android sqlite insert


    【解决方案1】:

    发生错误是因为列名和 TEXT 之间没有空格。所以列名变成了message_table。msg_typeTEXT

    COL_4 + "TEXT NOT NULL);"); //message type
    

    这应该可以修复错误:

    COL_4 + " TEXT NOT NULL);"); //message type
    

    【讨论】:

    • 我不敢相信我没有注意到这一点,这是一个菜鸟的错误!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2022-01-05
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2021-08-31
    • 2021-04-15
    相关资源
    最近更新 更多