Android SQLite从数据库中获得最年轻的人

时间:2017-08-14 13:54:00

标签: android mysql sqlite

我有一个Person对象,我存储在SQLite数据库中。

Person有Age,FirstName和LastName。

在某一特定时刻,我想找到最年轻的人(最低年龄)。

我该怎么做?

到目前为止,我有这个:

public Person getYoungest(Cursor c) {
        c.moveToFirst();
        db.rawQuery("SELECT MIN(" + AGE + ") FROM " + PERSON_TABLE, null);
        // Person youngestPerson = ???
        // return youngestPerson;
}

然而,我对“rawQuery”的作用感到困惑。它不会返回一个人物。此外,我不确定查询是否给了我最低的“年龄”,或者包含最低“年龄”的记录(这是我想要的)。我对SQL很新,所以这对我来说很奇怪。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您目前正在做的是查询数据集中的最小年龄值。如果您想获得整个数据行,则需要使用ORDER BY,例如

SELECT * FROM ... ORDER BY age ASC LIMIT 1

将按年龄按升序对数据进行排序。正如您所希望的那样,我们使用LIMIT来确保这样做(并使事情变得更快),但请注意,很可能许多记录可能具有相同的年龄(包括最低值),因此您可以扩展{ {1}}微调排序。

答案 1 :(得分:0)

SQLite返回字符串,数字,字节数组。

它们不像java对象。您必须使用构造函数检索每个值并在代码中初始化您的人。

或者使用realm数据库轻松帮助使用sqlite存储java对象。

不要忘记使用

来提高性能
SELECT * FROM ... LIMIT 1
像Marcin Orlowski说的那样。

检索数据使用此:

if (c.moveToFirst()) {
        int idColIndex = c.getColumnIndex("id");
        int nameColIndex = c.getColumnIndex("name");
        int emailColIndex = c.getColumnIndex("email");

 int id = c.getInt(idColIndex) 
          String name =    c.getString(nameColIndex) 
          String email   =  c.getString(emailColIndex)

创建一个对象使用它:

new Person(<your values>);

答案 2 :(得分:0)

db.rawQuery ==&gt;返回一个Cursor,它指向select语句中返回的数据,因此你应该生成

{{1}}