У меня есть один стол question_table
и один ImageButton
( Назад ). Мне нужно получить последнюю вставленную запись из базы данных после нажатия на кнопку « Назад» .
Моя строка содержит следующие столбцы: question
, optionA
, optionB
, optionC
, optionD
, и мне нужны данные для использования на моем Activity
. Я создаю один метод в базе данных, но он не работает.
Вот код для справки:
Извлечение MySQLiteHelper.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
из AddQuestionActivity.java
imgBack.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick(View v)
{
msg();
emptyFormField();
try {
final List<ObjectiveWiseQuestion> LocWiseProfile = db.getLastInsertQuestion();
for (final ObjectiveWiseQuestion cn : LocWiseProfile)
{
db=new MySQLiteHelper(getBaseContext());
db.getWritableDatabase();
txtQuestion.setText(cn.getQuestion());
txtOptionA.setText(cn.getOptionA());
txtOptionB.setText(cn.getOptionB());
txtOptionC.setText(cn.getOptionC());
txtOptionD.setText(cn.getOptionD());
txtCorrectOption.setText(cn.getCorrectOption());
db.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
});
Пожалуйста, дайте мне подсказку.
sqlite
должен отсортировать все записи по их идентификатору (медленно), прежде чем возвращать результат, Стивен Нгуен дал оптимальный запрос сDESC
иLIMIT 1
Я думаю, что главный ответ немного многословен, просто используйте это
SELECT * FROM table ORDER BY column DESC LIMIT 1;
источник
Чтобы получить последнюю запись из вашей таблицы ..
String selectQuery = "SELECT * FROM " + "sqlite_sequence"; Cursor cursor = db.rawQuery(selectQuery, null); cursor.moveToLast();
источник
Вот простой пример, который просто возвращает последнюю строку без необходимости сортировать что-либо из любого столбца:
"SELECT * FROM TableName ORDER BY rowid DESC LIMIT 1;"
источник
Я думаю, было бы лучше, если бы вы использовали запрос метода из класса SQLiteDatabase вместо всей строки SQL, которая была бы:
Последние два параметра - ORDER BY и LIMIT.
Вы можете увидеть больше на: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
источник
Если у вас уже есть курсор, то вот как вы можете получить последнюю запись от курсора:
cursor.moveToPosition(cursor.getCount() - 1); //then use cursor to read values
источник
Предположим, вы ищете последнюю строку таблицы dbstr.TABNAME в столбце INTEGER с именем «_ID» (например, BaseColumns._ID), но это может быть любой другой столбец, который вам нужен.
источник
Просто перемещаться можно с помощью
Cursor
moveToLast (); метод обеспечивает переход к последней записиисточник
Я хотел сохранить свою таблицу, вытаскивая одну строку, которая дает мне последнее значение в определенном столбце в таблице. По сути, я хотел заменить
LAST()
функцию в Excel, и это сработало., (Select column_name FROM report WHERE rowid = (select last_insert_rowid() from report))
источник
Другой вариант - использовать
LAST_VALUE()
функцию SQLites следующим образом.Учитывая эту таблицу:
+--------+---------+-------+ | 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
Результат будет выглядеть так:
+--------+--------------+ | OBJECT | LAST_STATUS | +--------+--------------+ | | | | 1 | ON | | | | | 2 | ON | | | | | 3 | ON | +--------+--------------+
источник
в sqlite есть таблица с именем sqlite_sequence, эта таблица содержит имя таблицы и ее последний номер идентификатора (если идентификатор увеличивается автоматически).
Итак, чтобы получить последнюю строку в таблице, просто введите:
Select * from TABLENAME where id=(SELECT * from sqlite_sequence where name ='TABLENAME')
источник
В предыдущих ответах предполагается, что существует столбец с увеличивающимся целочисленным идентификатором, поэтому
MAX(ID)
отображается последняя строка. Но иногда клавиши бывают текстового типа , а не упорядочены предсказуемым образом. Итак, чтобы взять последние 1 или N строк (# Nrows #), мы можем использовать другой подход :Select * From [#TableName#] LIMIT #Nrows# offset cast((SELECT count(*) FROM [#TableName#]) AS INT)- #Nrows#
источник