如何在 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();
}
我正在尝试遍历 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();
}