如何从Sqlite获取最新记录?

时间:2012-03-28 06:43:26

标签: android sqlite

我有一个表question_table和一个ImageButton返回)。单击后退后,我需要从数据库中获取最后插入的记录。

我的行包含以下列:questionoptionAoptionBoptionCoptionD,我需要在我的{上使用的数据{1}}。我在数据库中创建了一个方法,但它不起作用。

以下是供参考的代码:

MySQLiteHelper.java 提取:

Activity
来自 AddQuestionActivity.java

public List<ObjectiveWiseQuestion> getLastInsertQuestion() { // long index = 0; List<ObjectiveWiseQuestion>LocwiseProfileList=new ArrayList<ObjectiveWiseQuestion>(); db = getReadableDatabase(); Cursor cursor = db.query( "sqlite_sequence", new String[]{"seq"}, "name = ?", new String[]{TABLE_QUESTION}, null, null, null, null ); if (cursor.moveToFirst()) { do { ObjectiveWiseQuestion owq= new ObjectiveWiseQuestion(); owq.setQuestion(cursor.getString(2)); owq.setOptionA(cursor.getString(3)); owq.setOptionB(cursor.getString(4)); owq.setOptionC(cursor.getString(5)); owq.setOptionD(cursor.getString(6)); owq.setCorrectOption(cursor.getString(7)); LocwiseProfileList.add(owq); } while(cursor.moveToNext()); db.close(); } return LocwiseProfileList; }

OnClickListner

请给我一些提示。

13 个答案:

答案 0 :(得分:162)

我认为最佳答案有点冗长,只需使用此

SELECT * FROM table ORDER BY column DESC LIMIT 1;

答案 1 :(得分:154)

试试这个:

SELECT * 
    FROM    TABLE
    WHERE   ID = (SELECT MAX(ID)  FROM TABLE);

您还可以使用以下解决方案:

  

SELECT * FROM tablename ORDER BY列DESC LIMIT 1;

答案 2 :(得分:22)

从表中获取最后一条记录..

 String selectQuery = "SELECT  * FROM " + "sqlite_sequence";
 Cursor cursor = db.rawQuery(selectQuery, null);
  cursor.moveToLast();

答案 3 :(得分:8)

我认为如果你使用SQLiteDatabase类中的方法查询,而不是整个SQL字符串,那将会更好,这将是:

 Cursor cursor = sqLiteDatabase.query(TABLE, allColluns, null, null, null, null, ID +" DESC", "1");

最后两个参数是ORDER BY和LIMIT。

您可以在以下位置查看更多信息: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

答案 4 :(得分:6)

如果您已经获得了光标,那么这就是您从光标获取最后一条记录的方式:

cursor.moveToPosition(cursor.getCount() - 1);
//then use cursor to read values

答案 5 :(得分:3)

这是一个简单的示例,它仅返回最后一行,而无需对任何列中的任何内容进行排序:

"SELECT * FROM TableName ORDER BY rowid DESC LIMIT 1;"       

答案 6 :(得分:2)

很简单,你可以移动Cursor moveToLast(); 方法提供移动到最后一条记录

cursor.moveToLast();

答案 7 :(得分:2)

我想维护我的表,同时拉入一行以使表的特定列中的最后一个值为我。我本质上是在寻找替换excel中的LAST()函数的方法。

, (Select column_name FROM report WHERE rowid = (select last_insert_rowid() from report))

答案 8 :(得分:1)

假设您正在寻找表dbstr.TABNAME的最后一行,进入名为“_ID”的INTEGER列(例如BaseColumns._ID),但可能是您想要的任何其他列。

public int getLastId() {
    int _id = 0;
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = db.query(dbstr.TABNAME, new String[] {BaseColumns._ID}, null, null, null, null, null);

    if (cursor.moveToLast()) {
        _id = cursor.getInt(0);
    }

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

答案 9 :(得分:1)

另一种选择是以下列方式使用SQLite LAST_VALUE()函数。

给出此表:

ER_FK_NO_INDEX_PARENT: Failed to add the foreign key constraint. Missing index for constraint 'employee_ibfk_10' in the referenced table 'branch'

您可以通过以下查询获取每个对象的最后状态

+--------+---------+-------+
| OBJECT |  STATUS |  TIME |
+--------+---------+-------+
|        |         |       |
| 1      |  ON     |  100  |
|        |         |       |
| 1      |  OFF    |  102  |
|        |         |       |
| 1      |  ON     |  103  |
|        |         |       |
| 2      |  ON     |  101  |
|        |         |       |
| 2      |  OFF    |  102  |
|        |         |       |
| 2      |  ON     |  103  |
|        |         |       |
| 3      |  OFF    |  102  |
|        |         |       |
| 3      |  ON     |  103  |
+--------+---------+-------+

结果如下:

SELECT                           
    DISTINCT OBJECT,             -- Only unique rows
    LAST_VALUE(STATUS) OVER (    -- The last value of the status column
        PARTITION BY OBJECT      -- Taking into account rows with the same value in the object column
        ORDER by time asc        -- "Last" when sorting the rows of every object by the time column in ascending order
        RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING    -- Take all rows in the patition
    ) as lastStatus
FROM
    TABLE

答案 10 :(得分:0)

在sqlite中,有一个名为sqlite_sequence的表,该表包含表名和它的最后一个id号(如果id是自动递增的)。

所以,要获取表中的最后一行,只需输入:

Select * from TABLENAME where id=(SELECT * from sqlite_sequence where name ='TABLENAME')

答案 11 :(得分:0)

先前的答案 假设,其中有一个递增的整数 ID列,因此MAX(ID)给出最后一行。但是有时键是文本类型,不是以可预测的方式排列的。因此,为了采用最后1或N行(#Nrows#),我们可以采用不同的方法

Select * From [#TableName#]  LIMIT #Nrows# offset cast((SELECT count(*)  FROM [#TableName#]) AS INT)- #Nrows#

答案 12 :(得分:0)

此外,如果您的表没有 ID 列,或者按 id 排序不会返回最后一行,您始终可以使用 sqlite 架构原生“rowid”字段。

SELECT column 
FROM table 
WHERE rowid = (SELECT MAX(rowid) FROM table);