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.
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;
Je pense que la première réponse est un peu verbeuse, utilisez simplement ceci
SELECT * FROM table ORDER BY column DESC LIMIT 1;
Pour obtenir le dernier enregistrement de votre table ..
String selectQuery = "SELECT * FROM " + "sqlite_sequence";
Cursor cursor = db.rawQuery(selectQuery, null);
cursor.moveToLast();
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
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
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;"
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))
Simplement simple, vous pouvez vous déplacer avec la méthode Cursor
moveToLast (); permet de passer au dernier enregistrement.
cursor.moveToLast();
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;
}
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')