2013-01-17 169 views
0

我正在從sqlite數據庫中填充AChartEngine,我需要顯示所有的數據。我遇到的問題是當我刪除記錄時,圖表系列停止填充已刪除的記錄。我需要找到一種跳過刪除/空記錄並繼續填充我的圖形的方法。我需要它做同樣的方式listview跳過刪除的記錄,並不斷顯示所有行。我對很多這方面都很陌生,並且在這方面遇到了非常困難的時刻。我試圖寫if語句,以跳過刪除/空行,但似乎沒有任何工作。感謝您的幫助!跳過刪除/空行sqlite

在我的繪圖活動

for (int i = 1; !c.isAfterLast(); i++) { 

     String value1 = db.getValue1(i); 
     String value2 = db.getValue2(i); 

     c.moveToNext(); 

     double x7 = Double.parseDouble(value1); 
     double y7 = Double.parseDouble(value2); 

     myseries.add(x7, y7); 

     } 

我得到錯誤:CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

如果我與周圍嘗試,抓住它會填充行,直到刪除的記錄。

在我的SQLite數據庫 「編輯」 :

public String getValue1(long l) { 
    String[] columns = new String[]{ EMP_DEPT }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c != null){ 
    c.moveToFirst(); 
    String value1 = c.getString(0); 


     return value1; 


    } 
    return null; 
    } 






public String getValue2(long l) { 
    String[] columns = new String[]{ EMP_DATE1 }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c != null){ 
    c.moveToFirst(); 
    String value2 = c.getString(0); 


     return value2; 


    } 
    return null; 
    } 
+0

這確實表明,事情是根本性的錯誤您的設置如果你的數據庫中刪除什麼都可以像這樣影響你的圖表。從本質上說,你應該從查詢中加載圖表系列到數據庫,並且這個圖表系列負責爲圖表提供數據。影響數據庫後,它不應該影響圖形系列,從而影響圖形。 – mango

+0

圖本身不是問題...我遇到的問題是在查詢中,以及我如何填充該系列。我想我需要的是在我的查詢語句中跳過空行。看看更新後的帖子,我已經包含了我的查詢。 – Cgramme

+0

我的觀點是,人口步驟和刪除步驟應該是截然不同的步驟,以便在事情正確完成時永遠不會與其他人發生衝突。 – mango

回答

0

您的問題是,你的安全網,對不存在的行命令是使用if (c != null){,然後執行該塊裏面你的命令,從查詢Cursor請求不會拿出null,它會而是導致沒有行的遊標對象。

一個更合適的解決方案,以此作爲您的安全網,而不是if (c.moveToFirst()){因爲該方法本身,如果該方法實際上在首位本身進行返回boolean - true如果移動和false如果不是(這時候,那裏已經發生沒有行進入)。如果你願意,另一個檢查就是查看光標有多少行與c.getCount()

此外,還應該結合你的方法,讓你不要讓多餘的數據庫查詢:

public String[] getValues(long l) { 
    String[] results = new String[2]; 
    String[] columns = new String[]{ EMP_DEPT, EMP_DATE1 }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c.moveToFirst()) { 
     results[0] = c.getString(0); 
     results[1] = c.getString(1); 
    } else { 
     Log.d("GET_VALUES", "No results formed from this query!"); 
    } 
    return results; 
} 
+0

謝謝你對這件事的幫助。我一定要結合這些方法。我用一個簡單的try catch語句來處理它,但你的aproch似乎更好。會讓你知道它是否有效。 – Cgramme

0

你應該使用一個單一的查詢,一次獲得所有的值:

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345 

或:

db.query(EMP_TABLE, columns, EMP_ID + " BETWEEN 1 AND " + ..., ...); 

然後當您遍歷遊標時,缺少的值將不會顯示出來。