首页 > 解决方案 > WHERE 子句不起作用,不返回所需的值

问题描述

看看我的要求。我明确指定了参数,但请求没有返回正确的结果。我知道这个问题有很多话题,但我还没有看到像我这样的请求。请帮忙。

items = new ArrayList<>();
        items_test = new ArrayList<>();
        db = getBaseContext().openOrCreateDatabase("budget_app.db", MODE_PRIVATE,
                null);
//
        Cursor queryt = db.rawQuery("SELECT * FROM budget;", null);
        if (queryt.moveToFirst()) {
            while (queryt.moveToNext()) {
                String type = queryt.getString(0);
                String name = queryt.getString(1);
                String date = queryt.getString(2);
                Integer value = queryt.getInt(3);

                items_test.add(0, name);
            }
        }
        Log.d("Check", String.valueOf(items_test));


        Cursor queryt2 = db.rawQuery("SELECT * FROM budget WHERE name = \"loh\"", null);
        if (queryt2.moveToFirst()) {
            while (queryt2.moveToNext()) {
                String type = queryt2.getString(0);
                String name = queryt2.getString(1);
                String date = queryt2.getString(2);
                Integer value = queryt2.getInt(3);

                items_test2.add(0, name);
            }
        }
        Log.d("Check", String.valueOf(items_test2));

这是我的输出:

在此处输入图像描述

标签: javaandroidsqlite

解决方案


发现了错误。

你在打电话

if (queryt2.moveToFirst()) {
        while (queryt2.moveToNext()) { 
    ...

这会将您的光标移动到第二个位置(索引 1)

即,如果您将代码更改为“其中名称在('loh','fju');” 您应该只获得一个结果,而不是使用现有代码获得两个结果。

相反,您可以尝试

 queryt2.moveToFirst();
 while(!queryt2.isAfterLast()) {
    ...
    queryt2.moveToNext();
 }
     

还记得在使用后关闭光标。(或使用 try-with-resources)


推荐阅读