【问题标题】:Can anyone look into my AndroidSQLite query cursor?任何人都可以查看我的 Android SQLite 查询游标吗?
【发布时间】:2019-07-02 04:40:15
【问题描述】:
      Cursor cursor = db.rawQuery("SELECT * FROM fruits",null);

有效,但一旦我开始添加限制,例如:

      cursor = db.rawQuery("SELECT fruitName, color, 
       number FROM fruits WHERE color LIKE '%re%' AND fruitName LIKE 
      '%ppl%' AND number >=" + 5, null); 


       String[] fString = {"fruitName","color","number"};
        int[] tString = {R.id.fruit,R.id.color,R.id.number};

然后我在这里不断收到错误:

           ListAdapter adapter = new SimpleCursorAdapter(
            this,R.layout.newLayOutForSQL,cursor,
            fString,tString,0);

我在 db.rawQuery 中尝试了 SELECT * FROM fruits 并且效果很好,但是限制不起作用

           SQLiteDatabase db;

db 设置正确,所以不用担心

      cursor = db.rawQuery("SELECT fruitName, color, 
       number FROM fruits WHERE color LIKE '%re%' AND fruitName LIKE 
      '%ppl%' AND number >=" + 5, null); 


       String[] fString = {"fruitName","color","number"};
        int[] tString = {R.id.fruit,R.id.color,R.id.number};


           ListAdapter adapter = new SimpleCursorAdapter(
            this,R.layout.newLayOutForSQL,cursor,
            fString,tString,0);

预期:显示有限制的结果 实际结果:错误

【问题讨论】:

  • 你得到了什么“error”?请包含确切的错误消息或堆栈跟踪。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Overflow 上发帖,您已根据CC BY-SA 3.0 license 授予 SO 分发该内容的不可撤销的权利。根据 SO 政策,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请查看How does deleting work?

标签: android sql sqlite android-studio android-sqlite


【解决方案1】:

您收到错误的原因是因为未指定 *,您排除了 CursorAdapters 所需的 _id 列。

根据:-

游标必须包含名为“_id”的列,否则此类将不会 工作。此外,在此类中使用 MergeCursor 将不起作用,如果 合并的游标在其“_id”列中具有重叠值。 [CursorAdapter] (https://developer.android.com/reference/android/widget/CursorAdapter)(SimpleCursorAdapter 是 CursorAdapter 的间接子类

试试:-

cursor = db.rawQuery("SELECT _id, fruitName, color,
   number FROM fruits WHERE color LIKE '%re%' AND fruitName LIKE 
  '%ppl%' AND number >=" + 5, null); 

或者:-

cursor = db.rawQuery("SELECT * 
   FROM fruits WHERE color LIKE '%re%' AND fruitName LIKE 
  '%ppl%' AND number >=" + 5, null);

【讨论】:

  • 你知道为什么当我添加时它在 ListView 中没有显示任何内容: ListView listView = (ListView) findViewById(R.id.newList); listView.setAdapter(适配器);
  • 可能是因为选择标准过于排斥。尝试不使用 WHERE 子句,如果相同的代码显示项目,那么选择标准太排斥了。所以逐步添加到 WHERE 子句中。
  • 是的,它可以在没有 WHERE 子句的情况下工作并显示数据库中的每条数据,但是光标应该显示带有 WHERE 子句的内容,因为存在与限制匹配的数据。您将如何逐步添加到 WHERE 子句中?
  • 步骤 1 cursor = db.rawQuery("SELECT * FROM fruits WHERE color LIKE '%re%'",null);。第 2 步 cursor = db.rawQuery("SELECT * FROM fruits WHERE color LIKE '%re%' AND fruitName LIKE '%ppl%'",null); 等等 .... 运行每个并查看是否获得任何数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2016-03-03
相关资源
最近更新 更多