遍历Sqlite-query中的行

时间:2011-02-07 11:04:08

标签: android sqlite cursor

我有一个表格布局,我想用数据库查询的结果填充。 我使用select all并且查询返回四行数据。

我使用此代码填充表格行中的textviews。

Cursor c = null;
        c = dh.getAlternative2();
        startManagingCursor(c);
        // the desired columns to be bound
        String[] columns = new String[] {DataHelper.KEY_ALT};
        // the XML defined views which the data will be bound to
        int[] to = new int[] { R.id.name_entry};

         SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, 
                 R.layout.list_example_entry, c, columns, to);
         this.setListAdapter(mAdapter);

我希望能够分离KEY_ALT的四个不同值,并选择它们的去向。我希望他们在上面的示例中填充四个不同的textview而不是一个。如何迭代生成的光标?

问候,AK

7 个答案:

答案 0 :(得分:110)

数据库查询返回的

Cursor对象位于 之前 第一个条目,因此迭代可以简化为:

while (cursor.moveToNext()) {
    // Extract data.
}

来自SQLiteDatabase的参考。

答案 1 :(得分:80)

你可以使用下面的代码来浏览光标并将它们存储在字符串数组中,然后你可以在四个textview中设置它们

String array[] = new String[cursor.getCount()];
i = 0;

cursor.moveToFirst();
while (!cursor.isAfterLast()) {
    array[i] = cursor.getString(0);
    i++;
    cursor.moveToNext();
}

答案 2 :(得分:29)

for (boolean hasItem = cursor.moveToFirst(); hasItem; hasItem = cursor.moveToNext()) {
    // use cursor to work with current item
}

答案 3 :(得分:20)

迭代可以通过以下方式完成:

Cursor cur = sampleDB.rawQuery("SELECT * FROM " + Constants.TABLE_NAME, null);
ArrayList temp = new ArrayList();
if (cur != null) {
    if (cur.moveToFirst()) {
        do {
            temp.add(cur.getString(cur.getColumnIndex("Title"))); // "Title" is the field name(column) of the Table                 
        } while (cur.moveToNext());
    }
}

答案 4 :(得分:3)

我同意chiranjib,我的代码如下:

if(cursor != null && cursor.getCount() > 0){
  cursor.moveToFirst();
  do{
    //do logic with cursor.
  }while(cursor.moveToNext());
}

答案 5 :(得分:3)

找到一种迭代游标的非常简单的方法

for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){


    // access the curosr
    DatabaseUtils.dumpCurrentRowToString(cursor);
    final long id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));


}

答案 6 :(得分:0)

public void SQLfunction() {
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = {"column1","column2" ...};
    String sqlTable = "TableName";
    String selection = "column1= ?"; //optional
    String[] selectionArgs = {Value}; //optional

    qb.setTables(sqlTable);
    final Cursor c = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null);

   if(c !=null && c.moveToFirst()){
        do {
           //do operations
           // example : abcField.setText(c.getString(c.getColumnIndex("ColumnName")))

          }
        while (c.moveToNext());
    }


}

注意:要使用SQLiteQueryBuilder(),您需要添加

编译'com.readystatesoftware.sqliteasset:sqliteassethelper:+'       在您的成绩档案中