SQLiteOpenHelper即使在DB版本更改后也不更新数据库&卸载了Android App

时间:2016-08-18 09:03:38

标签: android sqlite android-sqlite

我遇到了我的SQLiteOpenHelper类 我创建了一个数据库,数据库中的所有数据都在应用程序上 但后来我在其中一个表中添加了一列,现在它在该表中显示no such column 我更新了数据库版本并卸载了应用程序并在更新数据库版本后再次安装它,但它仍然显示相同的问题:no such column存在。

如果我评论列:类型,那么它会显示no such column named desc

我在一个新文件中重新创建了整个数据库结构,但仍然存在同样的问题。

帮助我,伙计们!

public static final String TABLE_RESTAURANTS = "restaurants";
public static final String COLUMN_LID = "id";
public static final String COLUMN_LNAME = "name";
public static final String COLUMN_LDESC = "desc";
public static final String COLUMN_LTYPE = "type";

在onCreate

String CREATE_TABLE_RESTAURANTS = "CREATE TABLE " + TABLE_RESTAURANTS + "("
            + COLUMN_LID + " INTEGER PRIMARY KEY," + COLUMN_LNAME + "TEXT,"
            + COLUMN_LDESC + "TEXT," + COLUMN_LTYPE + "TEXT" + ")";
db.execSQL(CREATE_TABLE_RESTAURANTS);

在onUpgrade中

db.execSQL("DROP TABLE IF EXISTS"+ TABLE_RESTAURANTS);
onCreate(db);

插入方法

public void insertRestaurantItsms(AppetiserData cartData)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COLUMN_LNAME, cartData.getName());
    contentValues.put(COLUMN_LDESC, cartData.getDescription());
    contentValues.put(COLUMN_LTYPE, cartData.getCategory());

    // Inserting Row
    db.insert(TABLE_RESTAURANTS, null, contentValues);

    db.close(); // Closing database connection
}

获取方法

 public List<AppetiserData> getAllDatarl(){
    List<AppetiserData> dataList = new ArrayList<>();

    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_RESTAURANTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    cursor.moveToFirst();

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            AppetiserData data = new AppetiserData();

            data.setName(cursor.getString(1));
            data.setDescription(cursor.getString(2));

            // Adding data to list
            dataList.add(data);
        } while (cursor.moveToNext());
    }

    return dataList;
}

2 个答案:

答案 0 :(得分:1)

String CREATE_TABLE_RESTAURANTS = "CREATE TABLE " + TABLE_RESTAURANTS + "("
        + COLUMN_LID + " INTEGER PRIMARY KEY," + COLUMN_LNAME + "TEXT,"
        + COLUMN_LDESC + "TEXT," + COLUMN_LTYPE + "TEXT" + ")";

您需要在列名称及其类型之间留出空格,以获取descTEXT等列。

db.execSQL("DROP TABLE IF EXISTS"+ TABLE_RESTAURANTS);

EXISTS和表名之间需要空格。如果执行了这个SQL,你会看到有关语法的异常。

答案 1 :(得分:0)

当然你错过了这个空间,你也错过了在查询结束时放置分号。下面我已将这些更改添加到您的查询中并发布。

创建表格查询:

String CREATE_TABLE_RESTAURANTS = "CREATE TABLE IF NOT EXISTS " + TABLE_RESTAURANTS + " ( "
            + COLUMN_LID + " INTEGER PRIMARY KEY, " + COLUMN_LNAME + " TEXT, "
            + COLUMN_LDESC + " TEXT, " + COLUMN_LTYPE + " TEXT " + ");";

删除表:

db.execSQL("DROP TABLE IF EXISTS "+ TABLE_RESTAURANTS);

希望这有用:)