0

我有一个包含 70 条记录的 SQLite 数据库,并且想使用游标获取其中的 10 条记录。

我有KEY_ROWID(主键)的10 条记录2, 3, 15, 23, 35, 50, 51, 60, 61, 64

检索这些记录的 SQL 是什么?

这是我到目前为止所拥有的,但我认为这不会奏效......

我应该使用WHEREorHAVING子句吗?

任何帮助都会很棒。

public Cursor getTopTen() {

    String ids = "2, 3, 15, 23, 35, 50, 51, 60, 61, 64";

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(DATABASE_TABLE);

    String[] columns = new String[] { KEY_ROWID, RECIPE, DESC, PREPTIME,
            COOKTIME, SERVES, CALORIES, FAT, CATEGORY, FAV };

    Cursor myCursor = queryBuilder.query(myDataBase, columns, KEY_ROWID + "="
            + "'" + ids + "'", null, null, null, null);

    return myCursor;
}

在 SQL 中,上面的 java 是:

SELECT * FROM myDataBase WHERE KEYROWID = "2, 3, 15, 23, 35, 50, 51, 60, 61, 64".
4

2 回答 2

2

SQL 应该是:

SELECT * FROM myDataBase WHERE KEYROWID IN (2, 3, 15, 23, 35, 50, 51, 60, 61, 64)

当您想要获取列值位于特定值列表中的所有行时,您必须使用IN 运算符

所以你的代码应该是:

public Cursor getTopTen() {

    String ids = "2, 3, 15, 23, 35, 50, 51, 60, 61, 64";

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(DATABASE_TABLE);

    String[] columns = new String[] { KEY_ROWID, RECIPE, DESC, PREPTIME,
            COOKTIME, SERVES, CALORIES, FAT, CATEGORY, FAV };

    Cursor myCursor = queryBuilder.query(myDataBase, columns, KEY_ROWID + " IN ("
            + ids + ")", null, null, null, null);

    return myCursor;
}
于 2012-08-09T00:20:17.650 回答
0

在您的情况下,您应该使用 WHERE 子句而不是 HAVING 子句。

于 2012-08-09T00:05:17.920 回答