Saya memiliki satu meja question_table
dan satu ImageButton
( Belakang ). Saya perlu mendapatkan catatan yang disisipkan terakhir dari database setelah mengklik tombol Kembali .
Baris saya berisi kolom berikut: question
, optionA
, optionB
, optionC
, optionD
, dan saya membutuhkan data untuk digunakan pada saya Activity
. Saya membuat satu metode dalam database tetapi tidak berfungsi.
Ini kode untuk referensi:
Ekstrak 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
dari 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();
}
}
});
Tolong beri saya beberapa petunjuk.
sqlite
harus mengurutkan semua catatan berdasarkan id mereka (lambat) sebelum mengembalikan hasilnya, Stephen Nguyen memberikan permintaan yang optimal denganDESC
danLIMIT 1
Saya pikir jawaban teratas agak bertele-tele, gunakan saja ini
SELECT * FROM table ORDER BY column DESC LIMIT 1;
sumber
Untuk mendapatkan catatan terakhir dari tabel Anda ..
String selectQuery = "SELECT * FROM " + "sqlite_sequence"; Cursor cursor = db.rawQuery(selectQuery, null); cursor.moveToLast();
sumber
Berikut adalah contoh sederhana yang hanya mengembalikan baris terakhir tanpa perlu mengurutkan apa pun dari kolom mana pun:
"SELECT * FROM TableName ORDER BY rowid DESC LIMIT 1;"
sumber
Saya pikir akan lebih baik jika Anda menggunakan kueri metode dari kelas SQLiteDatabase daripada seluruh string SQL, yang akan menjadi:
Dua parameter terakhir adalah ORDER BY dan LIMIT.
Anda dapat melihat lebih banyak di: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
sumber
Jika Anda sudah mendapatkan kursor, inilah cara Anda mendapatkan rekaman terakhir dari kursor:
cursor.moveToPosition(cursor.getCount() - 1); //then use cursor to read values
sumber
Misalkan Anda mencari baris terakhir dari tabel dbstr.TABNAME, ke dalam kolom INTEGER bernama "_ID" (misalnya BaseColumns._ID), tetapi dapat berupa kolom lain yang Anda inginkan.
sumber
Sederhana saja, Anda bisa bergerak dengan
Cursor
moveToLast (); metode menyediakan untuk pindah ke catatan terakhirsumber
Saya ingin mempertahankan tabel saya sambil menarik satu baris yang memberi saya nilai terakhir di kolom tertentu dalam tabel. Saya pada dasarnya ingin mengganti
LAST()
fungsi di excel dan ini berhasil., (Select column_name FROM report WHERE rowid = (select last_insert_rowid() from report))
sumber
Pilihan lainnya adalah menggunakan
LAST_VALUE()
fungsi SQLites dengan cara berikut.Diberikan tabel ini:
+--------+---------+-------+ | OBJECT | STATUS | TIME | +--------+---------+-------+ | | | | | 1 | ON | 100 | | | | | | 1 | OFF | 102 | | | | | | 1 | ON | 103 | | | | | | 2 | ON | 101 | | | | | | 2 | OFF | 102 | | | | | | 2 | ON | 103 | | | | | | 3 | OFF | 102 | | | | | | 3 | ON | 103 | +--------+---------+-------+
Anda bisa mendapatkan status terakhir dari setiap objek dengan kueri berikut
SELECT DISTINCT OBJECT, -- Only unique rows LAST_VALUE(STATUS) OVER ( -- The last value of the status column PARTITION BY OBJECT -- Taking into account rows with the same value in the object column ORDER by time asc -- "Last" when sorting the rows of every object by the time column in ascending order RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- Take all rows in the patition ) as lastStatus FROM TABLE
Hasilnya akan terlihat seperti ini:
+--------+--------------+ | OBJECT | LAST_STATUS | +--------+--------------+ | | | | 1 | ON | | | | | 2 | ON | | | | | 3 | ON | +--------+--------------+
sumber
di sqlite, ada tabel bernama sqlite_sequence, tabel ini berisi nama tabel dan nomor id terakhirnya (jika id bertambah otomatis).
Jadi, untuk mendapatkan baris terakhir dalam sebuah tabel, letakkan saja:
Select * from TABLENAME where id=(SELECT * from sqlite_sequence where name ='TABLENAME')
sumber
Jawaban sebelumnya mengasumsikan bahwa ada kolom ID integer yang bertambah , sehingga
MAX(ID)
memberikan baris terakhir. Tetapi terkadang tombol-tombol tersebut berjenis teks , tidak diurutkan dengan cara yang dapat diprediksi. Jadi untuk mengambil 1 atau N baris terakhir (# Nrows #) kita dapat mengikuti pendekatan yang berbeda :Select * From [#TableName#] LIMIT #Nrows# offset cast((SELECT count(*) FROM [#TableName#]) AS INT)- #Nrows#
sumber