0

問題があります。すべてのアクティビティのデータベースを作成しました。各アクティビティでデータベースに情報を挿入する必要があるため、最初のアクティビティでは挿入が完了し、2 番目のアクティビティでは新しい挿入で行を更新してすべての情報を完成させ、など、私の問題は、最後の行を参照する方法がわからないことです.2番目のアクティビティの更新が最初のアクティビティで挿入された最後の行に発生するようにするにはどうすればよいですか?何か提案はありますか???

4

2 に答える 2

1

主キーだけを使用できます。データベースに何かを挿入すると、戻り値として主キーが取得されます。これを他のアクティビティを開くインテントに追加すると、以前に挿入した行を参照できます。

編集:

SQLiteDatabase オブジェクトを使用しているか、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);

2 番目のアクティビティの 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) {
                ...
            }           
        }
    }
}
于 2013-11-06T01:15:03.917 に答える
0

これを行う最善の方法は、行が挿入された時間を保持する列をデータベースに追加することです。次に、最新の行が必要な場合は、最新の時刻を持つ行を照会します。SQL 文字列の例は次のとおりです。

SELECT * FROM my_table WHERE 1 ORDER BY time_stamp LIMIT 1
于 2013-11-06T01:13:37.300 に答える