2017-08-14 98 views
-1

我有一个存储在SQLite数据库中的Person对象。Android SQLite从数据库中获得最年轻的人

人有年龄,名字和姓氏。

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

我该怎么做?

到目前为止,我有这样的:

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

不过,我真的很困惑在什么是 “rawQuery” 一样。它不会返回一个人物。另外,我不确定查询是否给我最低的“年龄”,或者包含最低的“年龄”(这是我想要的)的记录。我对SQL很陌生,所以这对我来说很奇怪。

有什么建议吗?

+3

你的用户名是...不寻常的。 –

+0

由于你的问题是非常基本的,你应该首先采用SQL教程。 –

+0

我对如何将查询翻译为Java对象感到困惑。 –

回答

0

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

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

或使用领域数据库,可以轻松地帮助存储java对象使用sqlite。

不要忘记使用

SELECT * FROM ... LIMIT 1 

像马尔钦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>); 
+0

这是最好的答案,因为它做了解决我的问题的最佳工作。 –

2

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

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

这将升序排序按年龄对数据进行排序。因为您只需要一个我们使用LIMIT以确保这种方式(并使事情更快),但请注意最有可能很多记录可能具有相同的年龄(包括最低值),因此您可以扩展ORDER BY以微调排序。

+0

谢谢!所以,即使我这样做,我如何从结果中检索Person对象? –

+0

您在数据库中没有对象。只是价值观。所以你很可能需要根据数据库中的值来构建你的对象。我强烈建议你先通过sqlite数据库教程,因为你似乎在盲目地做事。 –

0

db.rawQuery ==>返回游标这点从SELECT语句返回的数据所以你应该制作

Cursor cursor = db.rawQuery("SELECT * FROM PERSON_TABLE ORDER BY age ASC , null); 
if(cursor.moveToFirst()) //mean find data and point to the samllest 
cursor.getString(c.getColumnIndex("field_name"));