Java SQLiteException:near";从“开始”:多个联接的语法错误
任何人都可以看到我的查询中是否有错误,这是我第一次尝试多个连接,下面是logcat错误。提前谢谢Java SQLiteException:near";从“开始”:多个联接的语法错误,java,android,sql,sqlite,android-sqlite,Java,Android,Sql,Sqlite,Android Sqlite,任何人都可以看到我的查询中是否有错误,这是我第一次尝试多个连接,下面是logcat错误。提前谢谢 android.database.sqlite.SQLiteException:靠近“FROM”:语法错误 (代码1 SQLITE_错误[1]):,编译时:选择总和(A.quantity), A.配料,A.配方,B.配料类型,B.测量名称,C.id, D.计划名称,从数量A到加入成分A,从数量B到成分A =B.配料\名称加入计划\ A.配方上的配方为C.配方\名称加入膳食\计划为C.id上的D.计划
android.database.sqlite.SQLiteException:靠近“FROM”:语法错误 (代码1 SQLITE_错误[1]):,编译时:选择总和(A.quantity), A.配料,A.配方,B.配料类型,B.测量名称,C.id, D.计划名称,从数量A到加入成分A,从数量B到成分A =B.配料\名称加入计划\ A.配方上的配方为C.配方\名称加入膳食\计划为C.id上的D.计划\ A.配料的配方组 你的名字在哪里 代码
public void loadIngredient() {
shopList.clear();
db = (new DatabaseManager(this).getWritableDatabase());
String RECIPE_SEARCH = " SELECT SUM(A.quantity), A.ingredient, A.recipe, B.ingredient_type, B.measurement_name, C.id, D.plan_name, " +
"FROM " + DatabaseManager.TABLE_QUANTITY + " AS A JOIN " + DatabaseManager.TABLE_INGREDIENTS +
" AS B ON A.ingredient = B.ingredient_name" + " JOIN " + DatabaseManager.TABLE_PLAN_RECIPES + " AS C ON A.recipe = C.recipe_name " +
" JOIN " + DatabaseManager.TABLE_MEAL_PLAN + " AS D ON C.id = D.plan_recipe GROUP BY A.ingredient";
String selectQuery = "";
selectQuery = RECIPE_SEARCH + " WHERE D.plan_name LIKE ?";
c = db.rawQuery(selectQuery, new String[]{"%" + search + "%"});
if (c.moveToFirst()) {
do {
Shopping_List shopping_list = new Shopping_List();
shopping_list.setQuantity(c.getDouble(c.getColumnIndex("quantity")));
shopping_list.setIngredient_name(c.getString(c.getColumnIndex("ingredient_name")));
shopping_list.setIngredient_type(c.getString(c.getColumnIndex("ingredient_type")));
shopping_list.setMeasurement_name(c.getString(c.getColumnIndex("measurement_name")));
shopList.add(shopping_list);
} while (c.moveToNext());
c.close();
}
}
您的代码中有几个问题。
第一个逗号必须在变量
RECIPE\u SEARCH
中的FROM
子句前面的D.plan\u name
后面删除。第二个是
WHERE
子句,它必须位于groupby
子句之前。3d是指您必须为查询返回的列
SUM(A.quantity)
添加别名,以便您可以通过该别名检索该列,例如quantity
第四个问题是,您的查询没有返回任何列component\u name
,但我假设这是列A.component
,它应该别名为component\u name
因此,请改为:
public void loadIngredient() {
shopList.clear();
db = (new DatabaseManager(this).getWritableDatabase());
String RECIPE_SEARCH =
"SELECT SUM(A.quantity) quantity, A.ingredient ingredient_name, A.recipe, B.ingredient_type, B.measurement_name, C.id, D.plan_name " +
"FROM " + DatabaseManager.TABLE_QUANTITY + " AS A JOIN " + DatabaseManager.TABLE_INGREDIENTS + " AS B ON A.ingredient = B.ingredient_name " +
"JOIN " + DatabaseManager.TABLE_PLAN_RECIPES + " AS C ON A.recipe = C.recipe_name " +
"JOIN " + DatabaseManager.TABLE_MEAL_PLAN + " AS D ON C.id = D.plan_recipe " +
"WHERE D.plan_name LIKE ? GROUP BY A.ingredient";
c = db.rawQuery(RECIPE_SEARCH, new String[]{"%" + search + "%"});
if (c.moveToFirst()) {
do {
Shopping_List shopping_list = new Shopping_List();
shopping_list.setQuantity(c.getDouble(c.getColumnIndex("quantity")));
shopping_list.setIngredient_name(c.getString(c.getColumnIndex("ingredient_name")));
shopping_list.setIngredient_type(c.getString(c.getColumnIndex("ingredient_type")));
shopping_list.setMeasurement_name(c.getString(c.getColumnIndex("measurement_name")));
shopList.add(shopping_list);
} while (c.moveToNext());
}
c.close();
db.close();
}
此外,您的查询返回循环中未使用的列(我没有删除),您可以删除这些列。删除字符串
RECIPE\u SEARCH
.android.database.sqlite.SQLiteException:靠近“WHERE”:语法错误(代码1 sqlite\u错误[1]):,编译时选择SUM:(A.数量)例如:A.配料,A.配方,B.配料类型,B.测量名称,C.id,D.计划名称从数量中作为A.上的B.配料,A.配料,A.配料,A.配方,B.配料类型,B.配料类型,B.配料类型,B.测量名称,C.id,D.计划名称从A.配料,B.配料,A.配料=B.配料,A.配料,A.配料=B.配料,A.配料,A.配方,A.配方,A.配方=C.配方,C.配方,C.配方,D.计划,A.配料,D.计划,A.配料,D.配料,D.计划,A.配方。无法从包含34行7列的CursorWindow中读取第0行第1列。请参阅我的答案…我仍然无法从CursorWindow中读取第0行第1列。请确保在访问数据之前正确初始化光标。再次检查列名/别名。它们必须与循环中的列完全相同:quantity、 成分名称、成分类型、测量值名称
。您可以每次删除1个,以确定哪一个不相同。我看不出这些有任何问题。您是否复制了原样的代码?是否尝试从循环中一次删除1列?首先删除购物列表。setQuantity(c.getDouble(c.getColumnIndex(“quantity”))
并运行。然后删除购物清单.setComponent\u名称(c.getString(c.getColumnIndex(“Component\u name”));
etcWhy您将别名更改为成分数量
?在这一行:购物清单.setQuantity(c.getDouble(c.getColumnIndex(“quantity”));
您正试图用名称数量
检索它。