2012-07-02 8 views
12

"last_insert_rowid()"に問題があります。"SELECT last_insert_rowid()"は常に "0"を返します

は私のDB-ヘルパークラスでは、私は次のことをやっている:

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に多くのエントリがあり、オートインクリメント値がはるかに高いはずです。

私は間違っていますか?

+7

最後の挿入の直後に行IDを取得していますか?関数を理解しているので、最後の挿入と同じオープン接続を使用している場合にのみ、行IDを返します。 – JohnP

+1

ああ、私はその機能を忘れてしまった。そうかもしれない。私がしたかったのは、テーブルの中で最も高いIDを取得することでした。これには別の機能がありますか? – venni

+0

@JohnP - ありがとうございました。あなたのご意見はバグを見つけるのに役立ちました。 –

答えて

20

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; 
} 
9

あなたはそれが自動的に最後の挿入を選択します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; 
} 
関連する問題