Android SQLite错误:“没有这样的列:名称......”

时间:2012-12-03 17:36:28

标签: android database sqlite android-sqlite

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

  

12-03 21:04:33.716:I / SqliteDatabaseCpp(726):sqlite返回:错误   code = 1,msg =没有这样的列:Content3,   分贝= /数据/数据/ com.example.pp /数据库/ 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开发人员初学者:)

2 个答案:

答案 0 :(得分: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脚本。

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

答案 1 :(得分:0)

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