У меня есть таблица, которую я хочу заполнить результатом запроса базы данных. Я использую select all, и запрос возвращает четыре строки данных.
Я использую этот код для заполнения текстовых просмотров внутри строк таблицы.
Cursor c = null;
c = dh.getAlternative2();
startManagingCursor(c);
// the desired columns to be bound
String[] columns = new String[] {DataHelper.KEY_ALT};
// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.name_entry};
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
R.layout.list_example_entry, c, columns, to);
this.setListAdapter(mAdapter);
Я хочу иметь возможность разделить четыре разных значения KEY_ALT и выбрать, куда они идут. Я хочу, чтобы они заполнили четыре разных текстовых изображения вместо одного в моем примере выше. Как я могу перебирать полученный курсор?
С уважением, AK
Вы можете использовать приведенный ниже код, чтобы пройти через курсор и сохранить их в массиве строк, и после того, как вы можете установить их в четырех текстовых
String array[] = new String[cursor.getCount()];
i = 0;
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
array[i] = cursor.getString(0);
i++;
cursor.moveToNext();
}
Cursor
объекты, возвращаемые запросами базы данных, помещаются до первой записи, поэтому итерацию можно упростить до:
while (cursor.moveToNext()) {
// Extract data.
}
Ссылка из SQLiteDatabase
.
cursor.moveToPosition(-1)
будет иметь дело с общими курсорами.
for (boolean hasItem = cursor.moveToFirst(); hasItem; hasItem = cursor.moveToNext()) {
// use cursor to work with current item
}
Итерацию можно выполнить следующим образом:
Cursor cur = sampleDB.rawQuery("SELECT * FROM " + Constants.TABLE_NAME, null);
ArrayList temp = new ArrayList();
if (cur != null) {
if (cur.moveToFirst()) {
do {
temp.add(cur.getString(cur.getColumnIndex("Title"))); // "Title" is the field name(column) of the Table
} while (cur.moveToNext());
}
}
if (cur = null)
была не тем, что вы хотели написать ... Я думаю, что это должно быть, if (cur != null)
вместо этого if (cur != null)
. Также вы создаете экземпляр (и, следовательно, перезаписываете) temp
перед тем, как add
вещи.
Нашел очень простой способ перебора курсора
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
// access the curosr
DatabaseUtils.dumpCurrentRowToString(cursor);
final long id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));
}
Я согласен с chiranjib, мой код выглядит следующим образом:
if(cursor != null && cursor.getCount() > 0){
cursor.moveToFirst();
do{
//do logic with cursor.
}while(cursor.moveToNext());
}
public void SQLfunction() {
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect = {"column1","column2" ...};
String sqlTable = "TableName";
String selection = "column1= ?"; //optional
String[] selectionArgs = {Value}; //optional
qb.setTables(sqlTable);
final Cursor c = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null);
if(c !=null && c.moveToFirst()){
do {
//do operations
// example : abcField.setText(c.getString(c.getColumnIndex("ColumnName")))
}
while (c.moveToNext());
}
}
ПРИМЕЧАНИЕ. Чтобы использовать SQLiteQueryBuilder(), вам нужно добавить
compile 'com.readystatesoftware.sqliteasset: sqliteassethelper: +' в вашем файле оценки