我有一个表question_table
和一个ImageButton
(返回)。单击后退后,我需要从数据库中获取最后插入的记录。
我的行包含以下列:question
,optionA
,optionB
,optionC
,optionD
,我需要在我的{上使用的数据{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
请给我一些提示。
答案 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);