【问题标题】:Android No such table code 1 SQLITE_ERRORAndroid No such table code 1 SQLITE_ERROR
【发布时间】:2020-09-16 21:23:10
【问题描述】:

我正在为我的 sql 查询苦苦挣扎:

"SELECT A.ingredient_quantity, B.measurement_name, B.ingredient_name, B.description " + 
"FROM TABLE_QUANTITY JOIN TABLE_INGREDIENT ON A.ingredient = B.ingredient_name"

这是在告诉我:

没有这样的表:TABLE_QUANTITY(代码 1 SQLITE_ERROR)

这些表格是:

private static final String CREATE_TABLE_QUANTITY = "CREATE TABLE " + TABLE_QUANTITY + "(" + COL_ID +
     " INTEGER PRIMARY KEY, AUTO INCREMENT," + COL_INGREDIENT_QUANTITY + " NUMERIC, " +
     COL_RECIPE + " TEXT," + COL_INGREDIENT + " TEXT, FOREIGN KEY (" + COL_RECIPE + ") " +
     "REFERENCES " + TABLE_RECIPE + "(" + COL_RECIPE_NAME + "), FOREIGN KEY (" + COL_INGREDIENT + ") " +
     "REFERENCES " + TABLE_INGREDIENTS + "(" + COL_INGREDIENT_NAME + "))";

private static final String CREATE_TABLE_INGREDIENTS = "CREATE TABLE " + TABLE_INGREDIENTS + "("
     + COL_ID + " INTEGER PRIMARY KEY, AUTO INCREMENT," + COL_INGREDIENT_NAME + " TEXT,"
     + COL_DESCRIPTION + " TEXT," + COL_MEASUREMENT + " TEXT," + COL_INGREDIENT_TYPE + " TEXT, " +
     "FOREIGN KEY (" + COL_MEASUREMENT + ") REFERENCES " + TABLE_MEASUREMENT + "(" + COL_MEASUREMENT_NAME + "), " +
     "FOREIGN KEY (" + COL_INGREDIENT_TYPE + ") REFERENCES " + TABLE_INGREDIENT_TYPE + "(" + COL_TYPE_NAME + "))";

更新

public void loadRecipe() {
    itemRecipe.clear();
    db = (new DatabaseManager(this).getWritableDatabase());
    String RECIPE_SEARCH = " SELECT + A.ingredient_quantity, B.measurement_name, B.ingredient_name, B.description " +
            "FROM " + DatabaseManager.TABLE_QUANTITY + " AS A JOIN " + DatabaseManager.TABLE_INGREDIENTS +
            " AS B ON A.ingredient = B.ingredient_name";
    String selectQuery = "";
    selectQuery = selectQuery + RECIPE_SEARCH;

    c = db.rawQuery(selectQuery, new String[]{"%" + search_name + "%"});
    if (c.moveToFirst()) {
        do {
            RecipeList recipeList = new RecipeList();
            recipeList.setId(c.getInt(c.getColumnIndex("COL_ID")));
            recipeList.setIngredient_amount(c.getString(c.getColumnIndex("COL_INGREDIENT_QUANTITY")));
            recipeList.setMeasurement_name(c.getString(c.getColumnIndex("COL_MEASUREMENT_NAME")));
            recipeList.setIngredient_name(c.getString(c.getColumnIndex("COL_INGREDIENT_NAME")));
            recipeList.setDescription(c.getString(c.getColumnIndex("COL_DESCRIPTION")));
            itemRecipe.add(recipeList);
        } while (c.moveToNext());
        c.close();
    }

}

根据建议做了一些改动,谢谢。然而仍然得到 引起:android.database.sqlite.SQLiteException:没有这样的表:QUANTITY(代码1 SQLITE_ERROR):,编译时:SELECT + A.ingredient_quantity,B.measurement_name,B.ingredient_name,B.description FROM QUANTITY AS A JOIN INGREDIENTS AS B ON A.ingredient = B.ingredient_name

【问题讨论】:

  • SELECT + A.ingredient_quantity 中删除+。错误是:no such table: QUANTITY。所以表QUANTITY 没有创建。从设备上卸载应用程序,重新检查 SQLiteOpenHelper 的 onCreate() 方法,以便它包含两个表的正确 CREATE 语句并重新运行。如果这不起作用,请尝试使用干净的设备。
  • 谢谢。这解决了这个问题,但这是一个接一个,现在我得到 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.stu54259.plan2cook/com.stu54259.plan2cook.Recipe}: java.lang.IllegalArgumentException: Cannot bind argument在索引 1 处,因为索引超出范围。该语句有 0 个参数。
  • 提出一个新问题,提供所有相关代码、错误和信息。

标签: java android sqlite android-sqlite


【解决方案1】:

TABLE_QUANTITYTABLE_INGREDIENT 是字符串变量,您必须在 SQL 语句中连接它们并设置别名 A 和 B:

"SELECT A.ingredient_quantity, B.measurement_name, B.ingredient_name, B.description " +
"FROM " + TABLE_QUANTITY + "AS A JOIN " + TABLE_INGREDIENT + 
" AS B ON A.ingredient = B.ingredient_name"

还有什么问题是这样的:

INTEGER PRIMARY KEY, AUTO INCREMENT

在两个表的CREATE 语句中。
去掉逗号,如下:

INTEGER PRIMARY KEY AUTOINCREMENT

您可能必须从设备上卸载应用程序,以便删除数据库并重新运行以重新创建数据库和表。

【讨论】:

  • 谢谢。这是 Android Studio 中的 SQlite,它坚持在 AUTOINCREMENT 之前使用逗号
  • @RevansArden 检查此演示:dbfiddle.uk/… 以了解您做错了什么。正确的语法是 ...INTEGER PRIMARY KEY AUTOINCREMENT, ...,它也适用于 Android Studio。
  • 由于 TABLE_QUANTITY 和 TABLE_INGREDIENTS 位于 DatabaseManager 类而不是 Recipe 类中,因此也会出现找不到符号错误。我该如何解决这个问题?任何帮助都会很棒。
  • 您必须使用DatabaseManager.TABLE_QUANTITY
  • 试过了,它告诉我私人访问。
猜你喜欢
  • 2022-11-20
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多