Получить все столбцы строк из курсора SQLite в объект - PullRequest
0 голосов
/ 10 июля 2019

У меня есть курсор, который читает базу данных SQLite и получает много столбцов, я храню эти столбцы во многих массивах

private ArrayList<String> column1,column2,column3,column4, ... column n;
public getCursorData(Cursor cursor){
    if(cursor.moveToFirst()){
        do{
            column1.add(Cursor.getString("column1"));
            column2.add(Cursor.getString("column2"));
            column3.add(Cursor.getString("column3"));
            column4.add(Cursor.getString("column4"));
            ...
            columnn.add(Cursor.getString("columnN"));
        }while(cursor.moveToNext());
    }
}

Я ищу способ сохранить их в одном объекте (или массиве, или списке, или что-то), но я не могу понять, как это сделать

private Object[] object;
public getCursorData(Cursor cursor){
    if(cursor.moveToFirst()){
        int i=0;
        do{
            for(int f=0;f<cursor.getColumnCount();f++){
                object[i].put(cursor.getColumnName(i), cursor.getString(i)); // I don't know what I am doing!
            }
            i++;
        }while(cursor.moveToNext());
    }
}

Другая попытка использования массивов, где каждый столбец представляет собой целое число.

private String[][] data;
public getCursorData(Cursor cursor){
    if(cursor.moveToFirst()){
        int i=0;
        do{
            for(int f=0;f<cursor.getColumnCount();f++){
                data[i][f]=cursor.getString(f); // this is line 30
            }
            i++;
        }while(cursor.moveToNext());
    }
}

Эта последняя попытка завершается с ошибкой: в строке 30 появляется следующая ошибка java.lang.NullPointerException: Attempt to read from null array (я пометил эту строку в комментарии к коду)

1 Ответ

1 голос
/ 10 июля 2019

Я думаю, вы можете создать пользовательский объект для сопоставления этих значений .. Что-то вроде:

public class TableData {
    public String mColumn1;
    public String mColumn2;
    public String mColumn3;
    public String mColumn4;
    public String mColumn5;
}

public ArrayList<TableData> getCursorData(Cursor cursor) {

    ArrayList<TableData> resultList = new ArrayList();

    if(cursor.moveToFirst()){
        do{
            TableData row = new TableData();
            row.mColumn1 = Cursor.getString("column1");
            row.mColumn2 = Cursor.getString("column2");
            row.mColumn3 = Cursor.getString("column3");
            ...
            resultList.add(row);
        } while(cursor.moveToNext());
    }

    return resultList;
}

Edit:

Если вы хотите сохранить подход, вы должны:

private String[][] data;

public void getCursorData(Cursor cursor) {
    if (cursor.moveToFirst()) {
        data = new String[cursor.getCount()][]; // You have to instantiate your bi-dimensional array
        int i = 0;
        do {
            data[i] = new String[cursor.getColumnCount()];
            for (int f = 0; f < cursor.getColumnCount(); f++) {
                data[i][f] = cursor.getString(f);
            }
            i++;
        } while (cursor.moveToNext());
    }
}
...