在Android中使用rawQuery和rowid从sqlite数据库中选择一行

时间:2015-10-17 13:25:22

标签: android sqlite rowid

我创建了一个外观SQLite数据库,如下所示:enter image description here

我想在Android应用程序中执行的操作是使用ROWID从一行加载所有值并将它们放入数组中。例如:

Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);

这将返回第1行的所有值:51,35,63。但是,这总是只返回第一个值,在本例中为51.此外,cursor.getCount()始终返回1。 这是我的完整代码:

db = getReadableDatabase();

Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);

yData = new int[cursor.getCount()];

if (cursor.moveToFirst()) {
    for (int i = 0; i < cursor.getCount(); i++) {
        yData[i] = cursor.getInt(0);
        cursor.moveToNext();
    }
    cursor.close();
}
db.close();

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

如果我正确理解你需要从单行返回每列的值。由于您只选择单行并希望从每列获取值,因此您只需要获取每列的索引。然后迭代它们。以下是代码如何完成。

Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1 Limit 1", null);

    if (cursor.moveToFirst()) {

    String[] columnNames = cursor.getColumnNames();

     yData = new int[columnNames.length];

        for (int i = 0; i < columnNames.length; i++) {

            // Assume every column is int

            yData[i] = cursor.getInt(cursor.getColumnIndex(columnNames[i]));
        }

    }
    cursor.close();
    db.close();

答案 1 :(得分:0)

getInt(int columnIndex)方法返回请求的列而不是整行。然而,如果光标不为空或光标未超过最后一行,则 moveToFirst() moveToNext()会将光标移动到第一行或下一行。 moveToNext()被调用。否则两者都将返回false。

因此,成功时,游标包含一个完整的行,您可以通过直接提供基于0的索引或通过提供列名称的​​ getColumnIndex(String columnName)获取列索引来访问元素获取该列的索引并访问该列。

您可以参考Android开发者指南Cursor

答案 2 :(得分:0)

你总是得到相同的价值:

if (cursor.moveToFirst()) {

  for (int i = 0; i < cursor.getCount(); i++) {
      //cursor.getInt(0); You probably want to get 0, 1 & 2
      yData[i] = cursor.getInt(0);
      cursor.moveToNext();
  }

cursor.close();

}