【问题标题】:How do I select rows from table?如何从表中选择行?
【发布时间】:2020-12-19 13:56:03
【问题描述】:

我正在制作一个应用程序,其中 MainActivity 有一个包含用户列表的 RecyclerView,例如购物清单、每周清单等。

当用户点击一个项目时,它会导航到产品活动也有一个 RecyclerView。我有 2 个不同的 SQLite 数据库 1:lists 2:products。

我使用的逻辑是当用户添加列表时,列表数据库会记录列表名称和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);

【问题讨论】:

    标签: java android sqlite android-sqlite


    【解决方案1】:

    你在sql语句中传递了字符串list_nameuquoted的值,所以它被认为是列名。
    在查询中使用? 占位符并将list_name 作为rawQuery() 的第二个参数传递:

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

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

    【讨论】:

    • 感谢您的回答@forpas 错误消失了,但ProductsActivity 中的项目没有显示,尽管它在数据库中!除非查询是这样的:"SELECT * FROM"+DB_TABLE 但它会显示整个表格
    • @FathiOmer 这是一个不同的要求。使用填充 recyclerview 的代码发布一个新问题以澄清。
    • 我的错误是在 sqlite 中 update()insert() 之间存在冲突。谢谢@forpas
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多