web-dev-qa-db-fra.com

Comment obtenir le dernier disque de Sqlite?

J'ai un one table question_table et un ImageButton (Retour). Je dois obtenir le dernier enregistrement inséré dans la base de données après avoir cliqué sur le Back.

Ma ligne contient les colonnes suivantes: question, optionA, optionB, optionC, optionD et j'ai besoin des données pour les utiliser avec mon Activity. Je crée une méthode dans la base de données mais cela ne fonctionne pas.

Voici le code de référence:

MySQLiteHelper.Java extraire:

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 de 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();
        }           
    }
});

S'il vous plaît donnez-moi un indice.

78
user1294970

Essaye ça:

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

OU

vous pouvez également utiliser la solution suivante:

SELECT * FROM nom_table ORDER BY colonne DESC LIMIT 1;

161
Hasmukh

Je pense que la première réponse est un peu verbeuse, utilisez simplement ceci

SELECT * FROM table ORDER BY column DESC LIMIT 1;
174
Stephen Nguyen

Pour obtenir le dernier enregistrement de votre table ..

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

Je pense que ce serait mieux si vous utilisez la requête de méthode de la classe SQLiteDatabase insérée dans la chaîne SQL entière, qui serait:

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

Les deux derniers paramètres sont ORDER BY et LIMIT.

Vous pouvez en voir plus sur: http://developer.Android.com/reference/Android/database/sqlite/SQLiteDatabase.html

8
LeonardoSibela

Si vous avez déjà le curseur, voici comment vous pouvez obtenir le dernier enregistrement à partir du curseur:

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

Voici un exemple simple qui retourne simplement la dernière ligne sans qu'il soit nécessaire de trier quoi que ce soit dans aucune colonne:

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

Je souhaitais conserver ma table en tirant une ligne qui me donnait la dernière valeur d'une colonne particulière de la table. Je cherchais essentiellement à remplacer la fonction LAST() dans Excel et cela fonctionnait.

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

Simplement simple, vous pouvez vous déplacer avec la méthode CursormoveToLast (); permet de passer au dernier enregistrement.

cursor.moveToLast();
2
Dilavar M

Supposons que vous cherchiez la dernière ligne de la table dbstr.TABNAME dans une colonne INTEGER nommée "_ID" (par exemple, BaseColumns._ID), mais que vous puissiez utiliser n'importe quelle autre colonne de votre choix.

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;
}
1
Zanna

dans sqlite, il existe une table appelée sqlite_sequence, cette table contient le nom de la table et son dernier numéro d'identifiant (si l'identifiant est auto-incrémenté).

Donc, pour obtenir la dernière ligne d'un tableau, il suffit de mettre:

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