Android SQLite明显选择?

时间:2013-11-07 01:04:59

标签: android sqlite

我在我的Android应用程序中创建了一个Sqlite数据库,它看起来像这样:

create table msgs ( id integer primary key autoincrement, msg text not null, session text not null, sender text not null);

我可以像这样获得所有条目,但我不会理解正在发生的事情。

   String[] allColumns = {"msg","session","sender"};
   Cursor cursor = database.query(msgs, allColumns, id = insertId, null,  null, null, null);

我想做的是,只能通过一个独特的会话获取最新的条目我该如何在android中执行此操作?

编辑:如果这是mysql我会做“SELECT MAX(id)AS id2,msg,session FROM msgs GROUP BY session” 但是无法在SQLite中使用它:/

2 个答案:

答案 0 :(得分:1)

要执行完整的SQL查询,可以使用rawQuery

cursor = database.rawQuery("SELECT MAX(id) AS id2,msg, session FROM msgs GROUP BY session", null);

使用query,您必须设置如下参数:

cursor = database.query("msgs",
                        new String[] { "MAX(id) AS id2", "msg", "session" },
                        null, null,
                        "session",
                        null, null);

请注意,在SQLite版本3.7.11(Android API版本16,Jelly Bean)之前,在聚合查询中使用未聚合的列(msg)不起作用。

答案 1 :(得分:0)

始终检查documentation并注意类型!

您使用以下方法:

query(
    msgs, //String table: OK
    allColumns, //String[] columns: OK
    id = insertId, //String selection: NOT OK
    // ^--- this is a boolean which will render SQL something like
    // "SELECT ... WHERE TRUE ..." or "SELECT ... WHERE FALSE ..."
    // causing all rows or none to be displayed
    null, //String[] selectionArgs: OK
    null, //String groupBy: OK
    null, //String having: OK
    null); //String orderBy: OK

校正:

query(
    msgs, //table
    allColumns, //columns
    "id = ?", //selection
    new String[] {String.valueOf(insertId)}, //selectionArgs
    null, //groupBy
    null, //having
    null); //orderBy