2012-03-20 47 views
0

我有一個Android上的SQLite問題。現在,我從一個服務器拉取JSON對象,解析它,並把每個子對象的表的東西,如姓名,ROW_ID,獨特的ID等使用此代碼:Android SQLite重複元素

public void fillTable(Object[] detailedList){ 
    for(int i=0;i<detailedList.length;++i){ 
     Log.w("MyApp", "Creating Entry: " + Integer.toString(i)); 
     String[] article = (String[]) detailedList[i]; 
     createEntry(article[0], article[1], article[2], article[3], article[4], article[5]); 
    } 
} 

createEntry做它聽起來像。它需要6個字符串,並使用cv.put進行輸入。沒問題。

當我嘗試但是他們訂購,通過:

public String[] getAllTitles(int m){ 
    Log.w("MyApp", "getTitle1"); 
    String[] columns = new String[]{KEY_ROWID, KEY_URLID, KEY_URL, KEY_TITLE, KEY_TIME, KEY_TAGS, KEY_STATE}; 
    Log.w("MyApp", "getTitle2"); 
    Cursor c = ourDatabase.query(DATABASE_TABLENAME, columns, null, null, null, null, KEY_TIME); 
    Log.w("MyApp", "getTitle3"); 

    String title[] = new String[m]; 
    Log.w("MyApp", "getTitle4"); 

    int i = 0; 
    int rowTitle = c.getColumnIndex(KEY_TITLE); 
    Log.w("MyApp", "getTitle5"); 

    for(c.moveToFirst();i<m;c.moveToNext()){ 
     title[i++] = c.getString(rowTitle); 
     Log.w("MyApp", "getTitle " + Integer.toString(i)); 
    } 

    return title; 
} 

每個條目實際上有很多重複。我假設與我已同步的次數一樣多。有沒有辦法手動調用onUpgrade方法,該方法會刪除表並創建一個新表,或者更好地清除重複項?

第二個問題,有什麼方法可以通過反向排序嗎?我現在按時間排序,而最早添加的條目是第一個(最小的數字)。有沒有相反的情況?

回答

4

如果您不希望某個列中出現重複項,請使用UNIQUE關鍵字創建該列。然後你的數據庫將檢查你是否不插入重複項,你甚至可以指定在這種情況下應該發生什麼。我想這將是對你有好處:

CREATE TABLE mytable (
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    theone TEXT UNIQUE ON CONFLICT REPLACE 
) 

如果插入到的東西已經存在,它將刪除已有該項目並插入新行則行該表。這也意味着被替換的行會得到一個新的_id(因爲_id被設置爲自動增長 - 您不能自己插入該標識或它不會工作)

第二個問題:您可以指定順序的方向如果追加ASC(升序)或DESC(降序)。你可能想要DESC

Cursor c = ourDatabase.query(DATABASE_TABLENAME, columns, null, null, null, null, KEY_TIME + " DESC"); 
+0

謝謝。我之前看到過「desc」標籤,但是對於執行其他SQL類的人來說,這不是我。謝謝! – 2012-03-21 06:25:05