我有一个问题,我为所有活动创建了数据库,并且在每个活动中我应该向数据库插入信息,因此对于第一个活动,插入完成,对于第二个活动,我更新行以完成新插入以完成所有信息等等,我的问题是我不知道如何引用最后一行,我的意思是我该怎么做才能使第二个活动的更新发生在第一个活动中插入的最后一行,你有什么建议???
答案 0 :(得分:1)
你可以使用主键。当您向数据库中插入内容时,您将获得主键作为返回值。您可以将此添加到打开另一个Activity的Intent中,然后再引用您之前插入的行。
修改强>
我不知道你是使用SQLiteDatabase Object还是使用ContentProvider,但无论如何代码都差不多。在这个例子中,我将直接使用SQLiteDatabase对象,即使在大多数情况下使用ContentProviders是更好的选择。
在您的第一个活动中:
// When you perform an insert you get the id of the row which was just inserted.
long id = sqliteDatabase.insert("some_table", null, contentValues);
// The id will be -1 if an error occured
if(id >= 0) {
...
}
...
// When you start your second Activity you can add the id to the Intent
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
// The String is a tag with which you can later retrieve the id from the Intent.
// Note that you should never hardcode String like that, use constants in your app.
intent.putExtra("rowId", id);
在第二个活动的onCreate方法中,您可以检索ID:
@Override
protected void onCreate (Bundle savedInstanceState) {
// Check if the Activity has been created for the first time
if(savedInstanceState == null) {
// Retrieve the Intent with which the Activity was started
Intent intent = getIntent();
long id = intent.getLongExtra ("rowId", -1);
// If id is valid proceed
if(id >= 0) {
Cursor cursor = sqliteDatabase.query("some_table", columns, "_id = ?",
new String[] { String.valueOf(id) }, null, null, null, null);
// Check if Cursor is valid and if yes read your data.
if(cursor != null) {
...
}
}
}
}
答案 1 :(得分:0)
执行此操作的最佳方法是向数据库添加一个列,该列将保留插入行的时间。然后,当您需要最新的行时,查询具有最新时间的行。一个示例SQL字符串是:
SELECT * FROM my_table WHERE 1 ORDER BY time_stamp LIMIT 1