2012-07-14 18 views
5

Estoy desarrollando mi primera aplicación para Android en este momento, estoy usando múltiples tablas para obtener e insertar datos. durante el desarrollo y encontré que obtengo datos de la tabla con solo dos columnas STATS(_id, stat_name). ¿Cuál es mi problema? Tengo una actividad con 10 botones, y cada botón se correlaciona con uno stat_name. Cuando los usuarios presionan una de las teclas, la aplicación "va" a la tabla STATS para obtener el _id correcto y luego ingresa _id en otra tabla GAME_STATS(_id, PlayerId (fk), GameId(fk), StatsId(fk)(andmore)) en STATS._id = GAME_STATS.StatsId y básicamente tengo que hacer una operación similar para PlayerId.Obteniendo un solo valor de SQLite en Android

En este momento, estoy haciendo de esta manera:

public String getStatId(String statName){ 
    String statId = "Error"; 
    Cursor c = mDb.query(STAT_TABLE, new String[] {AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME}, AbstractDbAdapter.STAT_NAME+ " = " +statName, null, null, null, null); 
    int count = c.getCount(); 
    if(count == 1){ 
     c.moveToFirst(); 
     statId = c.getString(c.getColumnIndex(AbstractDbAdapter.STAT_ID)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp","StatId =" +statId); 
    return statId;  
} 

Lo que mi problema es, que sé que debe haber sólo un valor devuelto, y todavía tengo que usar las teclas, para hacerlo . Además, en mi opinión, parece complicado y tedioso escribir todo ese código solo para obtener una identificación de una tabla. Tengo 9 tablas en mi aplicación, y tendré que escribir un método similar cada vez que necesite _id de una tabla diferente cuando tengo, por ejemplo, solo nombre.

¿Alguien me puede decir si hay una manera más fácil de hacer todo eso? Por favor :) gracias! :)

Respuesta

7

Creo que no es mucho más simple que eso. Sin embargo, puede hacer que el método más genérico para que pueda volver a utilizar el código:

public String getFromDb(String tableName, String select, String selectBy, String selectName){ 
    String selection = "Error"; 
    Cursor c = mDb.query(tableName, new String[] {select}, selectBy + "=" + selectName, null, null, null, null); 
    if(c.getCount() == 1){ 
     c.moveToFirst(); 
     selection = c.getString(c.getColumnIndex(select)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp", select + "=" + selection); 
    return id;  
} 

Ejemplo de uso:

int statID = getFromDb(STAT_TABLE, AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME, statName); 
+0

Para el código más seguro sustituir 'selectBy + "=" + selectName, null' con ' selectBy + "=?", Nuevo String [] {} 'selectName – Afilu

7

Eso es tan simple como parece, pero Cursor.moveToFirst() devuelve false si el cursor está vacía para que pueda cortar la llamada c.getCount() y simplemente diga if(c.moveToFirst()) en su lugar. Esto le ahorrará un poco de escribir :)

Cuestiones relacionadas