我有一张桌子question_table和一张桌子ImageButton(后面).单击Back后,我需要从数据库中获取最后插入的记录.
我行包括下面的列:question,optionA,optionB,optionC,optionD,和我需要的数据对我的使用Activity.我在数据库中创建了一个方法,但它不起作用.
这是代码供参考:
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;
}
Run Code Online (Sandbox Code Playgroud)
OnClickListner来自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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
请给我一些提示.
Ste*_*yen 180
我认为最好的答案有点冗长,只需使用它
SELECT * FROM table ORDER BY column DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
Has*_*ukh 166
试试这个:
SELECT *
FROM TABLE
WHERE ID = (SELECT MAX(ID) FROM TABLE);
Run Code Online (Sandbox Code Playgroud)
要么
您还可以使用以下解决方案:
SELECT*FROM tablename ORDER BY列DESC LIMIT 1;
5hs*_*sba 22
要从你的表中获取最后一条记录..
String selectQuery = "SELECT * FROM " + "sqlite_sequence";
Cursor cursor = db.rawQuery(selectQuery, null);
cursor.moveToLast();
Run Code Online (Sandbox Code Playgroud)
我认为如果你使用SQLiteDatabase类中的方法查询,而不是整个SQL字符串,那将会更好,这将是:
Cursor cursor = sqLiteDatabase.query(TABLE, allColluns, null, null, null, null, ID +" DESC", "1");
Run Code Online (Sandbox Code Playgroud)
最后两个参数是ORDER BY和LIMIT.
您可以在以下网址查看更多信息:http: //developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
LAST_VALUE()另一种选择是按以下方式使用 SQLites函数。
鉴于此表:
| 目的 | 地位 | 时间 |
|---|---|---|
| 1 | 在 | 100 |
| 1 | 离开 | 102 |
| 1 | 在 | 103 |
| 2 | 在 | 101 |
| 2 | 离开 | 102 |
| 2 | 在 | 103 |
| 3 | 离开 | 102 |
| 3 | 在 | 103 |
您可以使用以下查询获取每个对象的最后状态
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
Run Code Online (Sandbox Code Playgroud)
结果如下:
| 目的 | 最后状态 |
|---|---|
| 1 | 在 |
| 2 | 在 |
| 3 | 在 |
您可以选择其他列来显示最后一个值,只需使用单独的窗口函数添加它即可:
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,
LAST_VALUE(TIME) OVER (
PARTITION BY OBJECT
ORDER by time asc
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) as lastTime
FROM
TABLE
Run Code Online (Sandbox Code Playgroud)
| 目的 | 最后状态 | 上次 |
|---|---|---|
| 1 | 在 | 103 |
| 2 | 在 | 103 |
| 3 | 在 | 103 |
或者通过进行某种串联:
SELECT
DISTINCT OBJECT, -- Only unique rows
LAST_VALUE(STATUS || ':' || TIME) 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 lastStatusTime
FROM
TABLE
Run Code Online (Sandbox Code Playgroud)
| 目的 | 最后状态时间 |
|---|---|
| 1 | 上:103 |
| 2 | 上:103 |
| 3 | 上:103 |
如果您已经获得了光标,那么这就是您从光标获取最后一条记录的方法:
cursor.moveToPosition(cursor.getCount() - 1);
//then use cursor to read values
Run Code Online (Sandbox Code Playgroud)
小智 6
这是一个简单的示例,仅返回最后一行,而无需对任何列进行任何排序:
"SELECT * FROM TableName ORDER BY rowid DESC LIMIT 1;"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127742 次 |
| 最近记录: |