我有一个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很新,所以这对我来说很奇怪。
有什么建议吗?
答案 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}}