2013-01-17 2 views
0

sqlite 데이터베이스에서 AChartEngine을 채우는 중이고 모든 데이터를 표시해야합니다. 내가 가지고있는 문제는 그래프 시리즈가 삭제 된 레코드에 채워지는 레코드를 삭제할 때입니다. 삭제 된/빈 레코드를 건너 뛰고 그래프를 채우는 방법을 찾아야합니다. listview가 삭제 된 레코드를 건너 뛰고 모든 행을 계속 표시하는 것과 같은 방식으로해야합니다. 나는 이것에 아주 새롭고 이것으로 아주 곤란한 시간을 보내고있다. 삭제 된/빈 행을 건너 뛰려면 if 문을 쓰려고 시도했지만 아무 것도 작동하지 않는 것 같습니다. 도와 주셔서 감사합니다! 내 그래프 활동삭제 된/비어있는 행 건너 뛰기 sqlite

: 나는 시도로 포위하고 삭제 된 기록까지 행을 채 웁니다 잡으면 CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

: 나는 오류가 점점 오전

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); 

     } 

.

내 SQLite는 데이터베이스에 "EDIT" :

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을 오지 않을 것이다, 그것은 것입니다 대신 행이없는 커서 객체가 생성됩니다. 거기 발생하면되는 (가 이동 한 경우 truefalse없는 경우 - 방법 자체는 방법이 실제로 처음에 자신을 수행하는 경우에 대한 boolean을 반환하기 때문에

더 적절한 솔루션은 if (c.moveToFirst()){ 안전 그물로 대신 사용하기 이동할 행 없음). 원하는 경우 다른 체크는 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

이 문제에 도움을 주셔서 감사합니다. 나는이 방법들을 결합해야 할 것입니다. 나는 간단한 시도 잡기 식으로 작업하게 만들었지 만 당신의 aproch는 더 좋아 보인다. 작동하는지 알려줍니다. – Cgramme

0

당신은 한 번에 모든 값을 얻을 수있는 하나의 쿼리를 사용한다 :

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345 

나 : 그럼

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

누락 된 값은 커서를 반복 할 때 나타나지 않습니다.