2016-08-18 78 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

相關問題