我坚持使用我的SQLiteOpenHelper类。
我创建了一个数据库,我所有的数据从数据库是在应用程序上。
但后来我在其中一个表中添加了一列,现在它在那个表中显示为no such column
。
我已经更新了DB版本,也卸载了应用程序,并在更新DB版本后再次安装,但它仍然显示同样的问题:no such column
存在。
如果我注释Column:type,那么它会显示no such column named desc
我在一个新文件中重新创建了整个DB结构,但仍然卡住了相同的问题。
帮帮我,伙计们!
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;
}
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语句,就会看到语法异常。
当然,您错过了空格,也错过了在查询末尾放置分号。下面我将这些更改添加到您的查询并发布。
Create Table Query:
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);
希望对大家有帮助