2015-11-03 21 views
1

我想獲得列_parentbook設置爲特定值的表中的所有值。當我嘗試檢索條目時,出現下面顯示的錯誤。Android:SQLite說一個列不存在

E/SQLiteLog: (1) table recipes has no column named _parentbook 
E/SQLiteDatabase: Error inserting _parentbook=Test _recipemethod=Stir in pot for 20 mins _recipeingredients=No bugs, freedom _recipedescription=Test recipe _recipename=Recipe 1 in Test _recipenotes=Do on Android Studio 

錯誤是指下面的方法,我用一個配方添加到數據庫

public void addRecipe(Recipe recipe) { 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_RECIPE_NAME, recipe.getRecipeTitle()); 
    values.put(COLUMN_RECIPE_DESCRIPTION, recipe.getRecipeDescription()); 
    values.put(COLUMN_RECIPE_INGREDIENTS, recipe.getIngredients()); 
    values.put(COLUMN_RECIPE_METHOD, recipe.getMethod()); 
    values.put(COLUMN_RECIPE_NOTES, recipe.getNotes()); 
    //values.put(COLUMN_IMAGE_ID, recipe.getImageId()); 
    values.put(COLUMN_PARENT_BOOK, recipe.getParentBook()); 

    SQLiteDatabase db = this.getWritableDatabase(); 
    db.insert(TABLE_RECIPES, null, values); 
    db.close(); 
} 

代碼用於初始化TABLE_RECIPES:

從獲得的食譜
String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + 
     COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     COLUMN_RECIPE_NAME + " TEXT, " + 
     COLUMN_RECIPE_DESCRIPTION + " TEXT, " + 
     COLUMN_RECIPE_INGREDIENTS + " TEXT, " + 
     COLUMN_RECIPE_METHOD + " TEXT, " + 
     COLUMN_RECIPE_NOTES + " TEXT, " + 
     COLUMN_IMAGE_ID + " INTEGER " + 
     COLUMN_PARENT_BOOK + " TEXT" + 
     ");"; 


@Override 
public void onCreate(SQLiteDatabase db) { 
    Log.e(TAG, "OnCreate() called"); 
    db.execSQL(CREATE_TABLE_RECIPES); 

} 

方法該表:

List<Recipe> recipes; 
public List<Recipe> getRecipes(String bookName) { 

    recipes = new ArrayList<>(); 

    SQLiteDatabase db = getWritableDatabase(); 
    //String query = "SELECT "+ COLUMN_PARENT_BOOK +" FROM " + TABLE_RECIPES + " WHERE " + COLUMN_PARENT_BOOK + "=" + bookName; 
    String query = "SELECT * FROM " + TABLE_RECIPES;// + " WHERE 1"; 

    // Cursor going to point to a location in the results 
    Cursor c = db.rawQuery(query, null); 
    // Move it to the first row of your results 
    c.moveToFirst(); 

    if (c.moveToFirst()) { 
     do { 
      if (c.getString(c.getColumnIndex(COLUMN_RECIPE_NAME)) != null) { 
       recipes.add(new Recipe(
         c.getString(c.getColumnIndex(COLUMN_RECIPE_NAME)), 
         c.getString(c.getColumnIndex(COLUMN_RECIPE_DESCRIPTION)), 
         c.getString(c.getColumnIndex(COLUMN_RECIPE_INGREDIENTS)), 
         c.getString(c.getColumnIndex(COLUMN_RECIPE_METHOD)), 
         c.getString(c.getColumnIndex(COLUMN_RECIPE_NOTES)), 
         // Add image here if required 
         c.getString(c.getColumnIndex(COLUMN_PARENT_BOOK)) 
       )); 
      } 
     } while (c.moveToNext()); 
    } 
    db.close(); 
    //c.close(); 
    return recipes; 
} 

我已經嘗試升級數據庫版本並在StackOverflow上查看其他類似問題,但都沒有幫助。

謝謝。

+1

明顯的錯字是明顯 – njzk2

回答

1

你忘了在comma(,)中創建表語句。

而不是

String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + 
    COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    COLUMN_RECIPE_NAME + " TEXT, " + 
    COLUMN_RECIPE_DESCRIPTION + " TEXT, " + 
    COLUMN_RECIPE_INGREDIENTS + " TEXT, " + 
    COLUMN_RECIPE_METHOD + " TEXT, " + 
    COLUMN_RECIPE_NOTES + " TEXT, " + 
    COLUMN_IMAGE_ID + " INTEGER " + 
    COLUMN_PARENT_BOOK + " TEXT" + 
    ");"; 

應該

String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + 
    COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    COLUMN_RECIPE_NAME + " TEXT, " + 
    COLUMN_RECIPE_DESCRIPTION + " TEXT, " + 
    COLUMN_RECIPE_INGREDIENTS + " TEXT, " + 
    COLUMN_RECIPE_METHOD + " TEXT, " + 
    COLUMN_RECIPE_NOTES + " TEXT, " + 
    COLUMN_IMAGE_ID + " INTEGER, " +      // Here you forgot to put comma(,) in this line 
    COLUMN_PARENT_BOOK + " TEXT" + 
    ");"; 
+0

@TheStuka做了上述解決方案爲您工作? –

+0

是的,謝謝! – TheStuka