127 votes

Comment obtenir le dernier enregistrement de Sqlite ?

J'ai une table unique question_table et un ImageButton ( Dos ). J'ai besoin de récupérer le dernier enregistrement inséré dans la base de données après avoir cliqué sur l'icône Dos .

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

Voici le code pour référence :

MySQLiteHelper.java extrait :

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

Veuillez me donner un indice.

0voto

briniSoft Points 1

Dans sqlite, il y a une table appelée sqlite_sequence, cette table contient le nom de la table et son dernier numéro d'identification (si l'identification est auto incrémentée).

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')

0voto

anefeletos Points 522

Le site réponses précédentes supposez qu'il y a un incrémentation entier colonne ID, donc MAX(ID) donne la dernière ligne. Mais parfois les clés sont de type de texte ne sont pas ordonnées de manière prévisible. Ainsi, afin de prendre les 1 ou N dernières lignes (#Nrows#), nous pouvons suivre la procédure suivante approche différente :

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

0voto

androias Points 45

De plus, si votre table n'a pas de colonne ID, ou si le tri par ID ne vous renvoie pas la dernière ligne, vous pouvez toujours utiliser le champ 'rowid' natif du schéma sqlite.

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

0 votes

C'est la solution la plus rapide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X