Obtenir la dernière valeur insérée de la base de données Android sqlite

j'essaie d'obtenir le dernier rowid inséré à partir d'une base de données sqlite dans Android. J'ai lu beaucoup de billets à ce sujet, mais je n'arrive pas à en faire fonctionner un. C'est ma méthode:

 public Cursor getLastId() {
        return mDb.query(DATABASE_TABLE, new String[] {KEY_WID}, KEY_WID + "=" + MAX(_id), null, null, null, null, null);}

J'ai essayé avec MAX, mais je dois l'utiliser mal. Est-il une autre voie?

24
demandé sur James Black 2010-10-25 23:03:06
la source

8 ответов

en fait la classe SQLiteDatabase a sa propre méthode insert qui renvoie l'id de la ligne nouvellement créée. Je pense que c'est la meilleure façon d'obtenir la nouvelle carte d'identité. Vous pouvez consulter sa documentation ici.

j'espère que cela aidera.

63
répondu Gorgi Rankovski 2012-03-26 22:44:08
la source

Utiliser

 SELECT last_insert_rowid();

pour obtenir le dernier rowid inséré. Si vous utilisez AUTOINCREMENT mot-clé puis

SELECT * from SQLITE_SEQUENCE;

vous indiquera les valeurs pour chaque table.

25
répondu Diego Torres Milano 2010-10-26 00:30:35
la source

Pour obtenir la dernière ligne de la table..

Cursor cursor = theDatabase.query(DATABASE_TABLE, columns,null, null, null, null, null);
cursor.moveToLast();
13
répondu HforHisham 2012-06-29 19:50:45
la source

Si vous voulez le last_insert_id juste après une insertion, vous pouvez utiliser :

public long insert(String table, String[] fields, String[] vals ) 
{
    String nullColumnHack = null;
    ContentValues values = new ContentValues();
    for (int i = 0; i < fields.length; i++) 
    {
        values.put(fields[i], vals[i]); 
    }

    return myDataBase.insert(table, nullColumnHack, values);
}
2
répondu user1296132 2012-03-29 18:18:26
la source

essaye ceci:

public Cursor getLastId() {
        return mDb.query(DATABASE_TABLE, new String[] { **MAX(id)** }, null, null, null, null, null, null);}
1
répondu Antonio Tonev 2011-06-07 14:08:15
la source
/**
 * @return
 */
public long getLastInsertId() {
    long index = 0;
    SQLiteDatabase sdb = getReadableDatabase();
    Cursor cursor = sdb.query(
            "sqlite_sequence",
            new String[]{"seq"},
            "name = ?",
            new String[]{TABLENAME},
            null,
            null,
            null,
            null
    );
    if (cursor.moveToFirst()) {
        index = cursor.getLong(cursor.getColumnIndex("seq"));
    }
    cursor.close();
    return index;
}
1
répondu Mitsuaki Ishimoto 2011-11-11 10:02:06
la source

Utiliser moveToLast()Cursor interface.

android.googlesource.com

/**
 * Move the cursor to the last row.
 *
 * <p>This method will return false if the cursor is empty.
 *
 * @return whether the move succeeded.
 */
boolean moveToLast();

exemple Simple:

final static String TABLE_NAME = "table_name";
String name;
int id;
//....

Cursor cursor = db.rawQuery("SELECT  * FROM " + TABLE_NAME, null);

if(cursor.moveToLast()){
    //name = cursor.getString(column_index);//to get other values
    id = cursor.getInt(0);//to get id, 0 is the column index
}

Ou vous pouvez obtenir la dernière ligne lors de l'insertion(Qui est @GorgiRankovski ont mentionné):

long row = 0;//to get last row
//.....
SQLiteDatabase db= this.getWritableDatabase();

ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_NAME, name);

row = db.insert(TABLE_NAME, null, contentValues);
//insert() returns the row ID of the newly inserted row, or -1 if an error occurred 

en outre, il y a plusieurs façons de le faire en utilisant query:

  1. On est exprimé par @DiegoTorresMilano
  2. SELECT MAX(id) FROM table_name. ou à obtenir toutes les valeurs des colonnes SELECT * FROM table_name WHERE id = (SELECT MAX(id) FROM table_name).
  3. Si votre PRiMARY KEY assis pour AUTOINCREMENT vous pouvez SELECT vaules occording à max min et limiter les lignes de 1 à l'aide de SELECT id FROM table ORDER BY column DESC LIMIT 1 (si vous voulez chaque valeur, utilisez * au lieu de id)
1
répondu Blasanka 2017-07-16 22:37:14
la source

la méthode insert renvoie l'id de la ligne juste insérée ou -1 s'il y avait une erreur lors de l'insertion.

long id = db.insert("your insertion statement");

db est une instance de votre base de données Sqlited.

0
répondu Anik Dey 2017-02-26 09:21:33
la source

Autres questions sur