改DB,更新DB版本不能加数据不能不加数据
Changed DB, updated DB version can't add data and can't not add data
我正在开发一个使用两个数据库的 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
}
和插入 class:
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;
}
我怎么会在这两种情况下都出错?我认为它没有识别出新列是从第一个错误中添加的,但它也不喜欢没有收到该列的数据。
发生错误是因为列名和 TEXT 之间没有 space。所以列名变成了message_table.msg_typeTEXT:
COL_4 + "TEXT NOT NULL);"); //message type
这应该可以修复错误:
COL_4 + " TEXT NOT NULL);"); //message type
我正在开发一个使用两个数据库的 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
}
和插入 class:
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;
}
我怎么会在这两种情况下都出错?我认为它没有识别出新列是从第一个错误中添加的,但它也不喜欢没有收到该列的数据。
发生错误是因为列名和 TEXT 之间没有 space。所以列名变成了message_table.msg_typeTEXT:
COL_4 + "TEXT NOT NULL);"); //message type
这应该可以修复错误:
COL_4 + " TEXT NOT NULL);"); //message type