Eu tenho uma mesa question_table
e uma ImageButton
( Voltar ). Preciso obter o último registro inserido do banco de dados após clicar em Voltar .
Minha linha contém as seguintes colunas: question
, optionA
, optionB
, optionC
, optionD
, e eu preciso os dados para uso no meu Activity
. Eu crio um método no banco de dados, mas não está funcionando.
Aqui está o código para referência:
Extrato 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, me dê alguma dica.
sqlite
deve classificar todos os registros por seu id (lento) antes de retornar o resultado, Stephen Nguyen deu a solicitação ideal comDESC
eLIMIT 1
Acho que a principal resposta é um pouco prolixa, basta usar
fonte
Para obter o último registro da sua mesa ..
fonte
Aqui está um exemplo simples que simplesmente retorna a última linha sem a necessidade de classificar nada de qualquer coluna:
fonte
Acho que seria melhor se você usar o método de consulta da classe SQLiteDatabase em vez de toda a string SQL, que seria:
Os dois últimos parâmetros são ORDER BY e LIMIT.
Você pode ver mais em: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
fonte
Se você já tem o cursor, é assim que você pode obter o último registro do cursor:
fonte
Simplesmente, você pode mover com
Cursor
moveToLast (); método fornece para mover para o último registrofonte
Eu queria manter minha tabela enquanto puxava uma linha que me fornecesse o último valor em uma coluna específica da tabela. Eu estava basicamente procurando substituir a
LAST()
função no Excel e isso funcionou.fonte
Suponha que você esteja procurando pela última linha da tabela dbstr.TABNAME, em uma coluna INTEGER chamada "_ID" (por exemplo BaseColumns._ID), mas pode ser qualquer outra coluna que você desejar.
fonte
no sqlite, existe uma tabela chamada sqlite_sequence, esta tabela contém o nome da tabela e seu último número de id (se o id for incrementado automaticamente).
Portanto, para obter a última linha de uma tabela, basta colocar:
fonte
As respostas anteriores presumem que há uma coluna de ID de número inteiro crescente , portanto,
MAX(ID)
fornece a última linha. Mas às vezes as chaves são do tipo texto , não ordenadas de maneira previsível. Portanto, para obter as últimas 1 ou N linhas (# Nrows #), podemos seguir uma abordagem diferente :fonte
Outra opção é usar SQLites
LAST_VALUE()
função da seguinte maneira.Dada esta tabela:
Você pode obter o último status de cada objeto com a seguinte consulta
O resultado ficaria assim:
fonte