我的光标只从sql数据库中获取最后一个条目,但我需要所有这些条目

时间:2014-01-13 22:59:55

标签: java android sql

每一个人。我正在尝试从数据库中获取数据,但它只显示最后一个条目。相同的代码适用于其他条目,但很长一段时间它不适用。我经常搜索,总是回答我的情况,所以我不知道该怎么做。我的代码:

hepublic void loadRevenueDate() {

    String dateFormat = "yyyy/MM/dd";
    SimpleDateFormat formater = new SimpleDateFormat(dateFormat);
    long l=0;
    Calendar cal = Calendar.getInstance();
    // Open database
    db.open();

    Cursor c = db.getRevData();

    if (c.moveToFirst()) {
        do {
            l = c.getLong(3);

        } while (c.moveToNext());
    }
    cal.setTimeInMillis(l);
    String date = formater.format(cal.getTime());
    revDate.setText(date);


    // Close the cursor
    c.close();
    c = null;

    // And close the database
    db.close();
}

请帮帮我。提前谢谢。

3 个答案:

答案 0 :(得分:1)

光标正确读取所有记录 - 但在重新分配给{{1}时覆盖并忽略以前的值变量。

在循环中“每行”执行操作,或以其他方式将相关数据保存到l等集合中。我想你的UI需要重新设计,但这不会“跳过”任何值:

ArrayList

答案 1 :(得分:0)

从代码中看起来你只是迭代值,直到你到达最后一个。如果你想对所有值做一些事情,你需要在循环中添加一些东西:

public void loadRevenueDate() {

String dateFormat = "yyyy/MM/dd";
SimpleDateFormat formater = new SimpleDateFormat(dateFormat);
long l=0;
Calendar cal = Calendar.getInstance();
// Open database
db.open();

Cursor c = db.getRevData();

long accum = 0;

if (c.moveToFirst()) {
    do {
        l = c.getLong(3);   

        // Do something here. For example:
        accum += l;  

    } while (c.moveToNext());
}
cal.setTimeInMillis(l);
String date = formater.format(cal.getTime());
revDate.setText(date);


// Close the cursor
c.close();
c = null;

// And close the database
db.close();
}

答案 2 :(得分:0)

这里的问题是你循环遍历所有结果行,在你对'l'做任何事情之前,将每行的long值分配给'l'一遍又一遍(覆盖之前的值)。所以当你使用'l'时(一旦循环完成),它将只包含最后一行的值。

如果您希望对分配给'l'的每个值执行某些操作,则需要在do ... while循环中执行此操作。即。

if (c.moveToFirst()) {
        do {
            l = c.getLong(3);

            //Do the actual thing with this row's 'l' here
            //E.g.
            System.out.println("l is currently set to: " + l);

        } while (c.moveToNext());
    }

希望这是有道理的。