16

「last_insert_rowid()」に問題があります。

私のDB-Helper-Classでは、次のことを行っています。

public int getLastID() {
    final String MY_QUERY = "SELECT last_insert_rowid() FROM "+ DATABASE_TABLE5;
    Cursor cur = mDb.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}

しかし、私がこれを私の意図で呼ぶとき:

int ID = mDbHelper.getLastID(); 
Toast.makeText(this, "LastID: " + ID, Toast.LENGTH_SHORT).show();

私はいつも「0」を取り戻します。それはできません。DBに多くのエントリがあり、自動インクリメントの値がはるかに高いはずだからです。

私が間違っていることは何ですか?

4

2 に答える 2

22

OK、それはジョンの正しいヒントでした;-)

クエリは次のようになります。

public int getHighestID() {
final String MY_QUERY = "SELECT MAX(_id) FROM " + DATABASE_TABLE5;
Cursor cur = mDb.rawQuery(MY_QUERY, null);
cur.moveToFirst();
int ID = cur.getInt(0);
cur.close();
return ID;
}   
于 2012-07-02T23:11:23.410 に答える
13

テーブル名を入力する必要はありませんlast_insert_rowid()。セッションから最後に挿入されたIDが自動的に選択されます。したがって、この関数を使用するだけでもかまいません。

public int getHighestID() {
    final String MY_QUERY = "SELECT last_insert_rowid()";
    Cursor cur = mDb.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}
于 2014-08-26T12:09:07.023 に答える