如何从表中选择行?

0lvr5msh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(394)

我正在制作一个应用程序,其中mainactivity有一个recyclerview,其中包含用户的列表,例如杂货店列表、每周列表等。
当用户单击某个项目时,它将导航到“产品”活动,该活动还有一个recyclerview。我有两个不同的sqlite数据库1:列表2:产品。
我使用的逻辑是,当用户添加一个列表时,列表数据库将记录列表名称和id,还将在产品数据库中添加列表名称,当用户添加产品时,我使用 update() 而不是 insert()SQLite 因为列已经存在,所以产品数据库中将更新产品名称和id。
这是列表和产品表的结构:

LISTS

  ID      LIST_NAME

1  1       list 1
2  2       list 2

PRODUCTS

  ID      LIST_NAME    PRODUCT_NAME

1  1       list 1     product1 in list1
2  2       list 1     product2 in list1

问题是,当我添加一个列表,然后导航到产品时,我看到以下错误:

android.database.sqlite.SQLiteException: no such column: list (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT * FROM prducts WHERE LIST_NAME = list, (OS error - 2:No such file or directory)

这是里面的方法 SQLiteOpenHelper 错误显示在这行: cursor = db.rawQuery(productsQuery, null); ```
public Cursor getAllProducts(String list_name)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;

    if (db != null)
    {
        String productsQuery = " SELECT * FROM " +DB_TABLE+ " WHERE "+LIST_NAME_COLUMN+ " = "+list_name;
        cursor = db.rawQuery(productsQuery, null);
    }
    return cursor;
}
在我使用的产品活动中 `Bundle bundle = getIntent().getExtras();` 从列表活动传递列表名称。在我使用的列表活动中 `intent.putExtra("list_name", list_name);` 
pepwfjgg

pepwfjgg1#

传递字符串的值 list_name 在sql语句中被引用,因此它被认为是一个列名。
使用 ? 查询和传递中的占位符 list_name 作为 rawQuery() :

String productsQuery = "SELECT * FROM " + DB_TABLE + " WHERE " + LIST_NAME_COLUMN + " = ?";
cursor = db.rawQuery(productsQuery, new String[] {list_name});

这样您就不必担心引用传递给查询的参数。

相关问题