SQLite,获取表中的最后一项

时间:2013-05-17 02:41:02

标签: android sqlite

使用我创建的数据库需要一些帮助。我需要访问数据库中的最后一项。这是我获取单个项目的代码。如何将其更改为仅获取最后一个?

// 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;
}

5 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

您是否正在寻找cursor.moveToLast()?这会将光标移动到从查询中选择的最后一条记录。然后,您可以照常使用cursor.getString(n)等获取字段值。

答案 2 :(得分: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;
}

答案 3 :(得分: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();
}

答案 4 :(得分: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唯一标识该用户,那么您所做的工作将起作用