2011-08-15 12 views
7

Próbuję utworzyć metodę pobierania max id z mojego stołu, ale mam problem.Android i SQLite - pobierz max id z tabeli

To jest moja metoda. To działa, ale zwracana jest wartość 0,

public int getLastId() { 
    openDB(); 
    int id = 0; 
    final String MY_QUERY = "SELECT MAX(_id) AS _id FROM organize"; 
    Cursor mCursor = mDb.rawQuery(MY_QUERY, null); 
    try { 
      if (mCursor.getCount() > 0) { 
      mCursor.moveToFirst(); 
      id = mCursor.getInt(mCursor.getColumnIndex(MY_QUERY)); 
      } 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      closeDB(); 
     } 
return id; 

} 

mogę rozwiązać ten problem, dzięki dużo

Odpowiedz

2
final String MY_QUERY = "SELECT MAX(_id) FROM organize"; 

spróbować tylko ten

+0

ya a także przepisać jako emazm powiedział –

+0

@hohotveryspicy Próbowałem tej kwerendy ale zwraca maksymalną wartość 9 chociaż mam 10 jako wartość maksymalna może u powiedz dlaczego zwraca 9, max n co powinienem zrobić, aby uzyskać wynik –

6

Przepisz tej linii

id = mCursor.getInt (mCursor.getColumnIndex (MY_QUERY));

do

id = mCursor.getInt(mCursor.getColumnIndex("_id")); 

lub lepiej

id = mCursor.getInt(0);//there's only 1 column in cursor since you only get MAX, not dataset 

I patrzeć na LogCat, to powiedzieć o swoim problemie.

+0

Mogę rozwiązać ten problem, dziękuję bardzo – user836807

1

Czy sprawdziłeś, że kod wewnątrz bloku try działa idealnie?
Może to być kod przeskakujący do bloku catch, a id zwraca 0, które zostało zainicjalizowane.

1

Spróbuj tej metody:

private int getMaxID(){ 
    int mx=-1; 
    try{ 
     db = this.getReadableDatabase(); 

     SQLiteDatabase db=this.getReadableDatabase(); 
     Cursor cursor=db.rawQuery("SELECT max(ID) from tblIntents ",new String [] {}); 
     if (cursor != null) 
      if(cursor.moveToFirst()) 
      { 

       mx= cursor.getInt(0); 

      } 
     // cursor.close(); 

     return mx; 
    } 
    catch(Exception e){ 

     return -1; 
    } 
}