Tengo una mesa question_table
y otra ImageButton
( Atrás ). Necesito obtener el último registro insertado de la base de datos después de hacer clic en Atrás .
Mi fila contiene las siguientes columnas: question
, optionA
, optionB
, optionC
, optionD
, y necesito los datos para su uso en mi Activity
. Creo un método en la base de datos pero no funciona.
Aquí hay un código de referencia:
Extracto de 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
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();
}
}
});
Por favor, dame una pista.
sqlite
debería ordenar todos los registros por su identificación (lento) antes de devolver el resultado, Stephen Nguyen dio una solicitud óptima conDESC
yLIMIT 1
Creo que la respuesta principal es un poco detallada, solo usa esto
fuente
Para obtener el último registro de su tabla ...
fuente
Aquí hay un ejemplo simple que simplemente devuelve la última línea sin necesidad de ordenar nada de ninguna columna:
fuente
Creo que sería mejor si usa la consulta del método de la clase SQLiteDatabase en lugar de toda la cadena SQL, que sería:
Los dos últimos parámetros son ORDER BY y LIMIT.
Puede ver más en: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
fuente
Si ya tiene el cursor, así es como puede obtener el último registro del cursor:
fuente
Simplemente simple, puede moverse con
Cursor
moveToLast (); proporciona el método para pasar al último registrofuente
Quería mantener mi tabla mientras tiraba de una fila que me da el último valor en una columna particular de la tabla. Básicamente, estaba buscando reemplazar la
LAST()
función en Excel y esto funcionó.fuente
Suponga que está buscando la última fila de la tabla dbstr.TABNAME, en una columna INTEGER llamada "_ID" (por ejemplo, BaseColumns._ID), pero podría ser cualquier otra columna que desee.
fuente
Otra opción es usar SQLites
LAST_VALUE()
función de la siguiente manera.Dada esta tabla:
Puede obtener el último estado de cada objeto con la siguiente consulta
El resultado se vería así:
fuente
en sqlite, hay una tabla llamada sqlite_sequence, esta tabla contiene el nombre de la tabla y su último número de identificación (si la identificación se incrementa automáticamente).
Entonces, para obtener la última fila de una tabla, simplemente coloque:
fuente
Las respuestas anteriores asumen que hay una columna de ID de entero en aumento , por lo que
MAX(ID)
da la última fila. Pero a veces las claves son de tipo texto , no ordenadas de forma predecible. Entonces, para tomar las últimas 1 o N filas (# Nrows #) podemos seguir un enfoque diferente :fuente