0

我的数据库有问题。我有两列,我的应用程序运行良好,但是当我尝试添加一个新列时,遇到了一个问题:

12-03 21:04:33.716: I/SqliteDatabaseCpp(726): sqlite 返回: 错误代码 = 1, msg = 没有这样的列: Content3, db=/data/data/com.example.pp/databases/MY_DATABASE

public class SQLiteAdapter {

public static final String MYDATABASE_NAME = "MY_DATABASE";
public static final String MYDATABASE_TABLE = "MY_TABLE";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_CONTENT1 = "Content1";
public static final String KEY_CONTENT2 = "Content2";
public static final String KEY_CONTENT3 = "Content3";

//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
    "create table " + MYDATABASE_TABLE + " ("
    + KEY_ID + " integer primary key autoincrement, "
    + KEY_CONTENT1 + " text, "
    + KEY_CONTENT2 + " text, "
    + KEY_CONTENT3 + " text);";

这是一个插入函数

public long insert(String content1, String content2, String content3){

    ContentValues contentValues = new ContentValues();
    contentValues.put(KEY_CONTENT1, content1);
    contentValues.put(KEY_CONTENT2, content2);
    contentValues.put(KEY_CONTENT3, content3);
    return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
}

这是一个光标

public Cursor queueAll(){
    String[] columns = new String[]{KEY_ID, KEY_CONTENT1, KEY_CONTENT2, KEY_CONTENT3};
    Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, 
            null, null, null, null, null);

    return cursor;
}

请帮我确定我的问题。对 Android 开发初学者的帮助 :)

4

2 回答 2

1

如果您在创建时填充表格,或者不需要将表格内容版本 1 保留到下一个版本,则如上所述自动增加表格版本号并将以下内容添加到您的SQLiteAdapter

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion >= newVersion)
        return;
    db.execSQL("DROP TABLE IF EXISTS " + MYDATABASE_TABLE);
    onCreate(db);
}

请注意,这将删除表并重新创建。如果内容必须保留,那么您将不得不编写一个ALTER TABLE适合您更改的脚本。

如果表格必须保留,请查看此 StackOverflow Q&A以了解如何完成Alter Tablein onUpgrade()。同样,您必须进行修改以满足您对已更改内容的需求,并且下次对数据库进行更改时,您将再次必须增加 DB 版本号并重写以匹配您所做的更改。

于 2012-12-03T18:34:16.390 回答
0

当您更新列或表时,您甚至需要更新数据库版本。如果您的数据库中有多个表,则需要确保文件中数据库的版本号相同。如果版本号存在冲突,则表不会同时更新。

于 2012-12-03T18:11:33.963 回答