2016-08-18 58 views
0

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

如果我评论专栏:类型,然后它说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; 
} 
+0

无论你有这种类型的字符串连接的,不要忘了在连接字符串之前添加。例如:... EXISTS “+ TABLE_RESTAURANTS ...,COLUMN_LNAME +” TEXT“, – DsD

回答

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); 

希望这是有益:)

+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曾经被执行过,你会看到一个有关语法的异常。

+0

这就是我所做的或U代表COLUMN_LNAME +”TEXT“, – Akash

相关问题