跳过已删除/空行的sqlite

时间:2013-01-17 21:44:25

标签: android sqlite for-loop achartengine

我从sqlite数据库填充AChartEngine,我需要显示所有数据。我遇到的问题是当我删除一个记录时,图形系列停止填充已删除的记录。我需要找到一种方法来跳过已删除/空记录并继续填充我的图表。我需要它以同样的方式执行它,listview跳过已删除的记录并继续显示所有行。我对很多这方面都很陌生,并且在这方面遇到了非常困难的时期。我试图编写if语句以跳过已删除/空行但似乎没有任何效果。谢谢你的帮助!

在我的图表活动中:

    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

如果我使用try和catch环绕它将填充行直到删除的记录。

“EDIT” 在我的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;
    }

2 个答案:

答案 0 :(得分:0)

您应该使用单个查询一次获取所有值:

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345

或:

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

然后迭代光标时,不会显示缺失值。

答案 1 :(得分: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;
}