2012-07-02 43 views
12

Tengo un problema con "last_insert_rowid()"."SELECT last_insert_rowid()" devuelve siempre "0"

En mi DB-ayudante-clase que estoy haciendo lo siguiente:

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

Pero cuando me llaman a esto en mi intención:

int ID = mDbHelper.getLastID(); 
Toast.makeText(this, "LastID: " + ID, Toast.LENGTH_SHORT).show(); 

consigo siempre "0" de nuevo. Eso no puede ser, porque tengo muchas entradas en mi base de datos y el valor de autoincremento debería ser mucho mayor.

¿Qué estoy haciendo mal?

+7

¿Está obteniendo la identificación de la fila inmediatamente después de su último inserto? Según entiendo la función, solo devolverá una identificación de fila si está utilizando la misma conexión abierta que su última inserción. – JohnP

+1

Oh, entonces no entendí la función. Eso podría ser. Lo que quería hacer es obtener la identificación más alta en la tabla. ¿Hay otra función para esto? – venni

+0

@JohnP - gracias, tu comentario me ayudó a localizar un error. –

Respuesta

20

bien, ese fue el toque justo John ;-)

La consulta debería tener este aspecto:

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

No es necesario poner el nombre mesa con last_insert_rowid() se seleccionará automáticamente último registro insertado Identificación de la sesión así que simplemente puede usar esta función también.

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