2012-01-01 123 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"此代码。我认为这是行不通的...

相关问题