2017-08-14 96 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"));