Как получить последнюю запись от Sqlite? - PullRequest
74 голосов
/ 28 марта 2012

У меня есть одна таблица question_table и одна ImageButton ( Back ). Мне нужно получить последнюю вставленную запись из базы данных после нажатия на Back .

Моя строка содержит следующие столбцы: 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();
        }           
    }
});

Пожалуйста, дайте мне подсказку.

Ответы [ 10 ]

167 голосов
/ 16 апреля 2013

Я думаю, что верхний ответ немного многословен, просто используйте это

SELECT * FROM table ORDER BY column DESC LIMIT 1;
157 голосов
/ 28 марта 2012

Попробуйте это:

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

ИЛИ

Вы также можете использовать следующее решение:

ВЫБРАТЬ * ИЗ ИМЕНИ таблицы ORDER BYстолбец DESC LIMIT 1;

22 голосов
/ 28 марта 2012

Чтобы получить последнюю запись из вашей таблицы ..

 String selectQuery = "SELECT  * FROM " + "sqlite_sequence";
 Cursor cursor = db.rawQuery(selectQuery, null);
  cursor.moveToLast();
8 голосов
/ 10 мая 2015

Я думаю, что было бы лучше, если бы вы использовали запрос метода из класса 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

6 голосов
/ 28 марта 2012

Если у вас уже есть курсор, то вот как вы можете получить последнюю запись от курсора:

cursor.moveToPosition(cursor.getCount() - 1);
//then use cursor to read values
3 голосов
/ 27 декабря 2018

Вот простой пример, который просто возвращает последнюю строку без необходимости сортировать что-либо из любого столбца:

"SELECT * FROM TableName ORDER BY rowid DESC LIMIT 1;"       
2 голосов
/ 10 июля 2018

Я хотел сохранить свою таблицу, вытягивая в одну строку, которая дает мне последнее значение в определенном столбце таблицы.По сути, я искал заменить функцию LAST() в Excel, и это сработало.

, (Select column_name FROM report WHERE rowid = (select last_insert_rowid() from report))
2 голосов
/ 24 января 2017

Просто, вы можете двигаться с помощью Cursor moveToLast (); метод позволяет перейти к последней записи

cursor.moveToLast();
1 голос
/ 18 февраля 2016

Предположим, вы ищете последнюю строку таблицы dbstr.TABNAME в столбце INTEGER с именем "_ID" (например, 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;
}
0 голосов
/ 10 января 2018

в sqlite, есть таблица с именем sqlite_sequence, эта таблица содержит имя таблицы и ее последний идентификационный номер (если идентификатор автоматически увеличивается).

Итак, чтобы получить последнюю строку в таблице простоположить:

Select * from TABLENAME where id=(SELECT * from sqlite_sequence where name ='TABLENAME')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...