简体   繁体   English

Android:SQLite说一列不存在

[英]Android: SQLite says a column doesn't exist

I am trying to get all the values in a table that have column _parentbook set to a certain value. 我正在尝试将_parentbook列设置为某个值的表中的所有值。 When I try to retrieve the entries I get the error shown below. 当我尝试检索条目时,出现以下错误。

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

The error refers to the method below that I use to add a recipe to the database 该错误是指我用来向数据库添加配方的以下方法

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

Code used to initialise TABLE_RECIPES: 用于初始化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);

}

Method for getting the recipes from the table: 从表格中获取食谱的方法:

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

I have tried upgrading the database version and looking at other similar questions on StackOverflow, neither helped. 我尝试升级数据库版本,并在StackOverflow上查看其他类似问题,但均无济于事。

Thanks. 谢谢。

You forgot to put comma(,) in create table statement. 您忘记在创建表语句中放入comma(,)

Instead of 代替

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

It should be 它应该是

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM