Android Sqlite get last insert row id

45,374

Solution 1

Your SQL statrment will return all the row ids, not just the latest. Try something like this...

SELECT ROWID from SQL_LITE_SEQUENCE order by ROWID DESC limit 1

Also note that I believe selecting from SQL_LITE_SEQUENCE will get the latest ID from ANY table, you can also access the SQL_LITE_SEQUENCE by selecting ROWID on any table, and getting just the IDs for that table. IE

SELECT ROWID from MYTABLE order by ROWID DESC limit 1

And thanks to MisterSquonk for pointing out the next step in the comments, adding it here for ease of reference later...

The query statement will then return a Cursor object containing the results, so to access the integer value you would do something like this (I'll substitute more common methods for your helper method, just for others sake)

String query = "SELECT ROWID from MYTABLE order by ROWID DESC limit 1";
Cursor c = db.rawQuery(query);
if (c != null && c.moveToFirst()) {
    lastId = c.getLong(0); //The 0 is the column index, we only have 1 column, so the index is 0
}

(Note that although the SQL Lite docs call ROWID and Integer, it is a 64 bit integer, so in Java it should be retrieved as a long.)

Solution 2

Care to use "selectlast_insert_rowid()"? :)

Share:
45,374
Android-Droid
Author by

Android-Droid

Android developer.

Updated on August 03, 2022

Comments

  • Android-Droid
    Android-Droid almost 2 years

    Possible Duplicate:
    Get generated id after insert

    I want to get the last inserted row id in my android application using this code :

    String query = "SELECT * from SQLITE_SEQUENCE";
    int createdUserId = Integer.parseInt(dbHelper.executeSQLQuery(query).toString());
    

    but the problem is that it's throws an exception that cannot convert dbHelper.executeSQLQuery(query).toString() to integer. I'm not really good at sqlite ,but i think that this should return the last row id which was inserted...which will definitely will be int (at least I think this way). So if this is not the right way, can someone please guide me how to get the last row id in android application.

    Thanks!!!

  • Vikas Gupta
    Vikas Gupta about 11 years
    Hey can you explain it a bit please like , how to execute this? i am trying by the Floating Coder's answer, but it is not executing :(
  • JimmyB
    JimmyB about 11 years
    Sorry, but I'm not sure what your problem is. Maybe you should open new question where you can give more details of what the problem is.
  • Marek Bar
    Marek Bar about 11 years
    This is the correct query: SELECT ROWID from MYTABLE order by ROWID DESC limit 1
  • weberc2
    weberc2 about 11 years
    I think that will give you the last id from any table, not just the last in your table, correct?
  • JimmyB
    JimmyB about 11 years
    @weberc2, last_insert_rowid() will return the ID which resulted from the most recent insert statement executed in the current session, on whatever table that may have been.
  • Jorge Fuentes González
    Jorge Fuentes González about 11 years
    Not atomic, unsecure. EDIT: Removed downvote, I thought that was asking another thing.
  • Beep.exe
    Beep.exe almost 10 years
    @Marek Bar NOT (if you are working with transactions)...
  • Christopher
    Christopher over 9 years
    @HannoBinder That seems to be what the question is asking: what's the most recent rowid "I want to get the last inserted row id in my android application using this code."
  • Timo
    Timo about 8 years
    There is a theoretical possibility that this may not give the correct answer, because if rows are deleted from the database and then new rows added, after a massive amount of inserts the rowid may reach it's limit at which point sqlite will try to pick random rowid slots to use for a while. Should this happen then obviously the last inserted row does not have the largest numeric value and thus simply sorting the row ids will not suffice. Autoincrement In SQLite