簡體   English   中英

如何從sqlite檢索列並將其存儲到數組中?

[英]How to retrieve a column from sqlite and store it into an array?

之前我曾問過這個問題 (經過谷歌搜索后,我閱讀了使用您自己的SQLite數據庫用於Android應用程序

因此,我有一個簡單的數據庫,其中包含2列(_id和引號)。 我需要做的是從數據庫中獲取所有引號,並在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();
        }

我該怎么辦? 謝謝

此功能是我從“ db”是數據庫實例的數據庫中獲取數據的方式。 該函數將返回一個二維字符串數組,其中[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;
}

Johan的解決方案還可以,但是您應該考慮使用邏輯對象。 表中的大多數行代表一個邏輯對象。 您應該將數據庫行提取到一個對象中,以便可以輕松地使用它們。

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"看到了此代碼。 我認為這行不通...

我將使用rawQuery獲取光標,然后在其中滾動。 在SQLiteDatabase文檔中找到該方法。

至於TextView。 在xml文件中聲明textview。 保留一個變量,該變量會記住您在光標所在的位置。 一旦rawQuery為您提供了正確的列,便可以使用許多方法在其中查找元素。 在這里檢查: 游標

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM