【问题标题】:SQLite where clause IssueSQLite where 子句问题
【发布时间】:2016-04-26 06:09:43
【问题描述】:

我在 SQLite 表中有大约30 记录,其中10 记录属于来自在线 的来源,其余的20 记录属于来自离线 的来源。

现在,我想从Online 中获取属于source 的所有records,为此我写了这个:

String sQuery = "SELECT * FROM " + TABLE_REMINDERS + " where " + KEY_SOURCE + " = 'Online'";

但是通过使用上述查询,我​​获取数据库中可用的所有记录,无论它属于离线还是在线

所以我错在哪里,为什么我无法获取仅属于源“Online”的数据

,我使用下面的查询从属于source 'Online' 的表中查询delete data,它适用于我:

db.execSQL("delete from "+ TABLE_REMINDERS + " where " + KEY_SOURCE + " = 'Online'");

代码

public List<Reminder> getAllOnlineReminders(){

        // String selectQuery = "SELECT * FROM " + TABLE_REMINDERS + " where " + KEY_SOURCE + " = 'Online'";

        String[] args = new String[]{"Online"};

        List<Reminder> reminderList = new ArrayList<>();

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_REMINDERS + " WHERE " + KEY_SOURCE + "=?", args);

        // Cursor cursor = db.rawQuery(selectQuery, null);

        // Looping through all rows and adding to list
        if(cursor.moveToFirst()){
            do{
                Reminder reminder = new Reminder();
                reminder.setID(Integer.parseInt(cursor.getString(0)));
                reminder.setTitle(cursor.getString(1));
                reminder.setmSource(cursor.getString(2));

                // Adding Reminders to list
                reminderList.add(reminder);
            } while (cursor.moveToNext());
        }
        return reminderList;
    }

但仍然获取所有记录,而我只想获取属于源“在线”的记录

【问题讨论】:

  • 您检查过您的数据库记录吗?我怀疑所有记录都以 Online 作为来源
  • 发布您的表结构。
  • 是否有重复条目?
  • 你能把你如何使用sQuery的代码贴出来吗?
  • @AngelKoh 我发布了代码,请立即查看

标签: android sqlite where-clause


【解决方案1】:

试试这个方法:

String[] args = new String[]{"Online"};
// For select
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_REMINDERS + " WHERE " + KEY_SOURCE + "=?", args);

// For delete
Cursor cursor = db.rawQuery("DELETE FROM " + TABLE_REMINDERS + " WHERE " + KEY_SOURCE + "=?", args);

【讨论】:

  • 谢谢,我发现了错误,现在我得到了解决方案,我在 onPostExecute() 中使用 getAllReminders() 而不是 getAllOnlineReminders()
【解决方案2】:

你可能想试试这个。它改编自我自己的 sqlite 代码。希望对您有所帮助。

    private final String[] allColumns = {"id", "title", KEY_SOURCE}; 
     //or whatever your column name is

    String[] args = {"Online"};

    Cursor cursor =
            db.query(TABLE_REMINDERS, // a. table
                    allColumns, // b. column names
                    KEY_SOURCE + "=?", // c. selection
                    args, // d. selections args
                    null, // e. group by
                    null, // f. having
                    null, // g. order by
                    null); // h. limit

重要提示:与您的问题无关,但请记得调用 cursor.close();用完之后。

【讨论】:

    【解决方案3】:

    游标 findEntry = db.query("sku_table", columns, "owner=?", new String[] { owner }, null, null, null);

    【讨论】:

    • 游标 findEntry = db.query("TABLE_REMINDERS ", columns, "Online=?", new String[] { Online}, null, null, null);
    • 和...为什么rawQueries 工作起来和query() 一样好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多