1

我需要一些帮助来使用我创建的数据库。我需要访问数据库中的最后一项。这是我获取单个项目的代码。我怎样才能改变它只得到最后一个?

// Getting single user
User getuser(int id) {
    SQLiteDatabase db = this.getReadableDatabase();


    Cursor cursor = db.query(TABLE_USER, new String[] { KEY_ID,
            KEY_NAME, KEY_AGE, KEY_WEIGHT, KEY_HEIGHT, 
            KEY_GOAL, KEY_BMI }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);

    if(cursor!=null && cursor.getCount()!=0){
          cursor.moveToFirst();
    }

    User user = new User(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getInt(2),cursor.getInt(3), cursor.getInt(4), 
            cursor.getString(5), cursor.getFloat(6));
    return user;
}
4

5 回答 5

1
Cursor cursor = db.query(TABLE_USER, new String[] { KEY_ID,
        KEY_NAME, KEY_AGE, KEY_WEIGHT, KEY_HEIGHT, 
        KEY_GOAL, KEY_BMI }, KEY_ID + "=?",
        new String[] { String.valueOf(id) }, null, null, KEY_ID + " DESC", "LIMIT 1");
于 2013-05-17T02:49:14.997 回答
0

你也许在寻找cursor.moveToLast()?这会将光标移动到从查询中选择的最后一条记录。然后,您可以像往常一样使用cursor.getString(n)etc获取字段值。

于 2013-05-17T02:53:56.920 回答
0

您只需要在代码中稍作更改,

// Getting single user
User getuser(int id) {
    SQLiteDatabase db = this.getReadableDatabase();


    Cursor cursor = db.query(TABLE_USER, new String[] { KEY_ID,
            KEY_NAME, KEY_AGE, KEY_WEIGHT, KEY_HEIGHT, 
            KEY_GOAL, KEY_BMI }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);

    if(cursor!=null && cursor.getCount()!=0){
          cursor.moveToLast();                     // Change here
    }

    User user = new User(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getInt(2),cursor.getInt(3), cursor.getInt(4), 
            cursor.getString(5), cursor.getFloat(6));
    return user;
}
于 2013-05-17T03:43:05.143 回答
0

试试这个:

Cursor c = db.rawquery("Select *from tablename");
c.movetoLast();

如果您想从最后一个到第一个获取数据,请使用以下代码:

Cursor c = db.rawquery("Select *from tablename");
c.movetoLast();
int count = c.getCount();
for(int i = 0; i < count; i++){
c.movetoPrevious();
}
于 2013-05-17T05:46:28.787 回答
0

如果 id 唯一标识用户,那么您将只获得一行作为您传递的 id 的结果,因此您不必担心它是数据库中的最后一个或第一个。如果只是您想要数据库中的最后一行,那么您不必传递 id,您可以执行 select * 并在检索后将光标移动到最后一行,即 cursor.moveToLast()。

如果您只想要最后一行,请执行此操作

User getuser() {
  SQLiteDatabase db = this.getReadableDatabase();


  Cursor cursor = db.query(TABLE_USER, new String[] { KEY_ID,
        KEY_NAME, KEY_AGE, KEY_WEIGHT, KEY_HEIGHT, 
        KEY_GOAL, KEY_BMI }, null,
        null, null, null, null, null);

  if(cursor!=null && cursor.getCount()!=0){
      cursor.moveToLast();
  }

  User user = new User(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getInt(2),cursor.getInt(3), cursor.getInt(4), 
        cursor.getString(5), cursor.getFloat(6));
  return user;
}

你的电话可以是这样的

User currentUser = db.getUser();

如果您传递一个 id 来获取用户详细信息,并且该 id 唯一地标识用户,那么您所做的将起作用

于 2013-05-17T06:56:51.703 回答