Как извлечь столбец из sqlite и сохранить его в массив? - PullRequest
1 голос
/ 01 января 2012

Ранее я задавал этот вопрос (и после некоторого поиска в Google я прочитал Использование собственной базы данных SQLite для приложения Android .

Итак, у меня есть простая база данных, которая содержит 2 столбца (_id и кавычки). Что мне нужно сделать, это взять все цитаты из БД и показать их 1 на 1 в TextView.

У меня есть это в моем DataBaseHelper.java:

private SQLiteDatabase myDataBase; 
public void openDataBase() throws SQLException{

    //Open the database
    String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    Cursor mCursor = myDataBase.query(true, DB_NAME, null, new String[] + "=" + "_id", null,
              null, null, null, null);
        if (mCursor != null) {
          mCursor.moveToFirst();
        }

Что мне делать? Спасибо

Ответы [ 3 ]

3 голосов
/ 02 января 2012

Эта функция позволяет извлекать данные из базы данных, где "db" - это экземпляр базы данных.Эта функция будет возвращать массив 2D-строк, где [0] [x] - первая строка, которую она выбрала, а [1] [x] - вторая и т. Д .;и x это столбцы, и в вашем случае [0] [1] будет первой цитатой в вашей базе данных.

public String[][] customQuery(String query) {
    Cursor cur = null;
    try {
        cur = db.rawQuery(query,null);
    } catch(SQLException e) {
        Log.d("DATABASE", e.toString());
    }

    String data[][] = new String[cur.getCount()][cur.getColumnCount()];

    if (cur != null) {
        int i = 0;
        while (cur.moveToNext()) {
            int j = 0;
            while (j < cur.getColumnCount()) {
                data[i][j] = cur.getString(j);
                j++;
            }
            i++;
            cur.moveToNext();
        }
        cur.close();
    }
    return data;
}
2 голосов
/ 02 января 2012

Решение от Йохана в порядке, но вы должны подумать об использовании логических объектов.В основном одна строка вашей таблицы представляет собой логический объект.Вы должны извлечь строку базы данных в один объект, чтобы вы могли легко с ними работать.

Пример для Bookmark объекта:

public static List<Bookmark> getBookmarks(SQLiteDatabase db, long emagId) {
    List<Bookmark> bookmarksList = null;
    Cursor cursor = null;
    try {
        // WHERE clause for the SELECT query
        final String where = Bookmark.EMAG_ID + " = " + emagId;

        cursor = db.query(Bookmark.TABLE, new String[] {}, where, null, null, null, null);

        bookmarksList = new ArrayList<Bookmark>();

        while (cursor.moveToNext()) {
            Bookmark bookmark = new Bookmark();
            bookmark.id = cursor.getLong(cursor.getColumnIndex(Bookmark.ID));
            bookmark.emag_id = cursor.getLong(cursor.getColumnIndex(Bookmark.EMAG_ID));
            bookmark.page_number = cursor.getInt(cursor.getColumnIndex(Bookmark.PAGE_NUMBER));
            bookmark.article_id = cursor.getLong(cursor.getColumnIndex(Bookmark.ARTICLE_ID));

            bookmark.ref_html = cursor.getString(cursor.getColumnIndex(Bookmark.REF_HTML));
            bookmark.ref_text = cursor.getString(cursor.getColumnIndex(Bookmark.REF_TEXT));

            bookmark.ref_html = bookmark.ref_html;
            bookmark.ref_text = "Page: " + bookmark.page_number;

            bookmark.resource_id = cursor.getLong(cursor.getColumnIndex(Bookmark.RESOURCE_ID));
            bookmark.resource_type = cursor.getInt(cursor.getColumnIndex(Bookmark.RESOURCE_TYPE));
            bookmark.source_type = cursor.getInt(cursor.getColumnIndex(Bookmark.SOURCE_TYPE));
            bookmark.content_path = cursor.getString(cursor.getColumnIndex(Bookmark.CONTENT_PATH));

            bookmarksList.add(bookmark);
        }
    } catch (Exception e) {
        Log.e(LOG_TAG, "::getBookmarksForEmagId", e);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return bookmarksList;
}

Я видел этот код в вашем вопросе new String[] + "=" + "_id".Я думаю, что это не будет работать ...

1 голос
/ 02 января 2012

Я бы использовал rawQuery , чтобы получить курсор, а затем прокрутить его. Найдите метод в документации по SQLiteDatabase.

Что касается TextView. Объявите textview в вашем XML-файле. Сохраните переменную, которая запоминает положение курсора, на котором вы находитесь. Как только ваш rawQuery даст вам правильные столбцы, есть много методов, которые вы можете использовать для поиска элементов в нем. Проверьте здесь: Курсор .

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