2012-01-01 133 views
1

早些時候我問這個question(和一些谷歌上搜索後,我看了使用自己的SQLite database for Android app如何從sqlite檢索列並將其存儲到數組中?

所以,我有一個包含2列(_id和引號)一個簡單的數據庫,我需要做的就是抓住所有的從DB報價和在TextView中顯示他們1 1

我有這個在我的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(); 
     } 

我應該怎麼辦謝謝

+0

你是什麼意思1在Textview中1?可以澄清一點嗎? – gtdevel 2012-01-01 21:37:20

+0

@gtdevel我有2個按鈕(上一個/下一個)。按他們將前往/下一個報價,並顯示在一個文本視圖。 – Nima 2012-01-01 21:42:01

+0

它是你遇到麻煩的文本視圖或列的sqlite查詢?或兩者在一起? – gtdevel 2012-01-01 22:01:15

回答

3

這個函數是我從數據庫中獲取數據的地方,其中「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; 
} 
+1

我不得不改進發布的代碼。它有一個NPE漏洞,'cur.isAfterLast()== false'的使用在邏輯上是正常的,但是'cur.moveToNext()'也返回一個布爾值。所以檢查這個更容易,並且不需要moveToFirst()調用。 – WarrenFaith 2012-01-02 01:33:51

+0

謝謝,它工作! – Nima 2012-01-02 02:06:29

1

我會用一個rawQuery來獲得一個光標,然後滾動瀏覽它。在SQLiteDatabase文檔中找到該方法。

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

2

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"此代碼。我認爲這是行不通的...

相關問題