如何在 SQLite 中循环游标一次,关闭并移动到下一个而不再次显示第一行

How to loop through a cursor in SQLite once, close and move to next without displaying the first row again

我正在尝试遍历 arrayList 但问题是每次循环时,第一个循环只显示一个元素,第二个循环显示前一个元素和一个新元素,循环继续,我想要一次只显示一个元素,我是这样做的:

private void checkDB() {
    Cursor data = mDatabaseHelper.getData();
    ArrayList<String> list1 = new ArrayList<String>();
    ArrayList<String> list2 = new ArrayList<String>();
    ArrayList<String> list3 = new ArrayList<String>();
    ArrayList<String> list4 = new ArrayList<String>();

    if (data.getCount() == 0) {
        Toast.makeText(context, "No Data", Toast.LENGTH_SHORT).show();
    }
    while (data.moveToNext()) {
        list1.add(data.getString(1));
        list1.add(data.getString(2));
        list1.add(data.getString(3));
        list1.add(data.getString(4));
        Log.e(TAG, "checkDB1: " + list1);
    }
}

这是结果:

checkDB1: [3586, 4801, 02305767706, testeOM004]
checkDB1: [3586, 4801, 02305767706, testeOM004, 3586, 4801, 02305767671, testeOM001]
checkDB1: [3586, 4801, 02305767706, testeOM004, 3586, 4801, 02305767671, testeOM001, 3586, 4801, 02305767682, testeOM002]
checkDB1: [3586, 4801, 02305767706, testeOM004, 3586, 4801, 02305767671, testeOM001, 3586, 4801, 02305767682, testeOM002, 3586, 4801, 02305767693, testeOM003]

每次循环,它也显示前一个,我试图只打印一个数据而不是前一个,我尝试了堆栈中的一些解决方案但仍然相同。其他我试过的:

for (data.moveToNext(); data.isAfterLast(); data.moveToNext()) {
    list1.add(data.getString(1));
    list1.add(data.getString(2));
    list1.add(data.getString(3));
    list1.add(data.getString(4));
    Log.e(TAG, "checkDB1: " + list1);
}

您所要做的就是在 while 循环的每次迭代结束时清除列表:

while (data.moveToNext()) {
    list1.add(data.getString(1));
    list1.add(data.getString(2));
    list1.add(data.getString(3));
    list1.add(data.getString(4));
    Log.e(TAG, "checkDB1: "+list1);
    list1.clear();
}