Android:SQLite说列不存在

时间:2015-11-03 16:21:35

标签: java android sqlite

我正在尝试将列_parentbook设置为某个值的表中的所有值。当我尝试检索条目时,我得到如下所示的错误。

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 个答案:

答案 0 :(得分:1)

您忘记将comma(,)放入create table statement。

而不是

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