Android 遍历Sqlite查询中的行

Android 遍历Sqlite查询中的行,android,sqlite,cursor,Android,Sqlite,Cursor,我想用数据库查询的结果填充一个表布局。我使用全选,查询返回四行数据 我使用此代码填充表行中的文本视图 光标c=null; c=dh.getAlternative2(); 开始管理光标(c); //要绑定的所需列 字符串[]列=新字符串[]{DataHelper.KEY_ALT}; //数据将绑定到的XML定义的视图 int[]to=newint[]{R.id.name_entry}; SimpleCursorAdapter mAdapter=新的SimpleCursorAdapter(此, R.

我想用数据库查询的结果填充一个表布局。我使用全选,查询返回四行数据

我使用此代码填充表行中的文本视图

光标c=null;
c=dh.getAlternative2();
开始管理光标(c);
//要绑定的所需列
字符串[]列=新字符串[]{DataHelper.KEY_ALT};
//数据将绑定到的XML定义的视图
int[]to=newint[]{R.id.name_entry};
SimpleCursorAdapter mAdapter=新的SimpleCursorAdapter(此,
R.layout.list_示例_条目,c,列,to);
这个.setListAdapter(mAdapter);
我希望能够分离KEY_ALT的四个不同值,并选择它们的位置。我希望它们填充四个不同的文本视图,而不是上面示例中的一个


如何迭代生成的光标?

可以通过以下方式进行迭代:

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());
    }
}

您可以使用下面的代码遍历游标并将它们存储在字符串数组中,然后在四个textview中设置它们

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

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

Cursor
数据库查询返回的对象定位在第一个条目之前,因此迭代可以简化为:

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

参考。

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

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

找到了一种在光标上迭代的非常简单的方法

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


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


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

编译'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
在你的成绩档案中,这是有道理的,但我不明白该如何使用它。我还应该使用ListAdapter吗?我应该在哪里指定每个值应该指向的文本视图?我跳过ListAdapter并使用mTv4.setText(ids[3])使其正常工作;指定每个textview的值。谢谢!我遇到了同样的问题,我和你一样做了,但是我忘了增加I(I++),所以只有第一行在那里!!!对不起,如何初始化cur?我看到有人使用cursorcur=sampleDB.rawQuery(“SELECT*FROM”+Constants.TABLE_NAME,null);但是我不知道sampleDB我不知道如何初始化sampleDB我还需要检查以确保光标不为null,并且有值(通过
.getCount()
方法)。不过我还是投了赞成票!我几乎可以肯定,如果(cur=null)不是您想写的内容,那么您的行
。。。我想应该是
如果(cur!=null)
。另外,在您添加东西之前,您正在实例化(并因此覆盖)
temp
。我还修复了代码的其他部分。希望你不介意这确实是最好的例子。imho.+1也
游标。moveToPosition(-1)
将处理共享游标。如果我要遍历行并且行包含联接数据,则会引发异常
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){


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


}
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());
    }


}