android - Iterating through rows of SQLite table to update ids -


i'm working on android app sqlite database.

i have table called reminder (with 2 columns: reminder_id , reminder_value) , allowing user delete record table. reasons take bit explain, need reminder_id column have sequential numbers. so, if user deletes row 2, need eliminate gap, row 3 becomes row 2, row 4 becomes row 3, etc..

i wrote method in dbhelper class update of db whenever row deleted, i'm not sure whether best way it.

below method delete row reminder table. can see, before delete row, check whether it's last row or not, because if don't have bother updating ids.

public void deletereminder(int reminder_id){     sqlitedatabase db = this.getwritabledatabase();      string selectquery = "select max(" + column_reminder_id + ") " + reminders_table;     cursor cursor = db.rawquery(selectquery, null);     int maxid = cursor.getint(cursor.getcolumnindex(column_reminder_id));      db.delete(reminders_table, column_reminder_id + "= ?", new string[] {string.valueof(reminder_id)});      if (reminder_id != maxid){         updateremindersids();     }      cursor.close();     db.close(); } 

this method used updating id's:

    public void updateremindersids(){          sqlitedatabase db = this.getwritabledatabase();         string selectquery = "select * " + reminders_table;         cursor cursor = db.rawquery(selectquery, null);         contentvalues values = new contentvalues();         int new_id = 1;          if(cursor.movetofirst()){             do{                 values.put(column_reminder_id, new_id);                 int old_id = cursor.getint(cursor.getcolumnindex(column_reminder_id));                 db.update(reminders_table, values, column_reminder_id + "= ?", new string[] {string.valueof(old_id)});                 new_id++;              } while (cursor.movetonext());         }      } } 

i haven't gotten point of testing yet, if works, i'm wondering whether there better way of doing this? reason asking because don't have experience.

thank you

edit: creating method implements joachim isaksson's solution:

public void updateremindersids(){     sqlitedatabase db = this.getwritabledatabase();     string updatequery = "update " + reminders_table + " set " + column_reminder_id + " = (" +                             "select count(*) + 1 " + reminders_table + " r " +                             "where " + reminders_table + "." + column_reminder_id + "> r." + column_reminder_id + ")";      db.execsql(updatequery);     db.close();  } 

i suppose correct android / java / sqlite?

as long have unique reminder id's, renumber items using single update;

update reminders set reminder_id = (   select count(*)+1   reminders r   reminders.reminder_id>r.reminder_id ); 

an sqlfiddle test with.


Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

c# - Unity IoC Lifetime per HttpRequest for UserStore -

I am trying to solve the error message 'incompatible ranks 0 and 1 in assignment' in a fortran 95 program. -