Foros del Web » Programando para Internet » Android »

Concurrencia al acceder a una BD

Estas en el tema de Concurrencia al acceder a una BD en el foro de Android en Foros del Web. Holaaa! alguién se ha topado con un caso de concurrencia a la base de datos? tengo una aplicacion que accede a una base de datos, ...
  #1 (permalink)  
Antiguo 31/03/2015, 21:12
 
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires, Mar del plata
Mensajes: 250
Antigüedad: 11 años, 4 meses
Puntos: 2
Concurrencia al acceder a una BD

Holaaa!

alguién se ha topado con un caso de concurrencia a la base de datos?
tengo una aplicacion que accede a una base de datos, en donde se hace una consulta. Si acceden mas de 2 a la vez a la misma tabla para sacar un dato, la aplicación se cierra o no logra obtener nada, devolviendo null.

hay alguna clase para manejar ese tipo de procesos? o tiene que ver con el archivo de php que utilizo para hacer la consulta?

Gracias!!
  #2 (permalink)  
Antiguo 02/04/2015, 04:29
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 9 años, 7 meses
Puntos: 154
Respuesta: Concurrencia al acceder a una BD

Yo pregunto, que tiene que ver PHP en todo esto?...Android usa SQLite como base de datos y es gestionado desde Java. PHP lo usas en el servidor, no en la aplicación.

Por otro lado, logicamente, si abris y cerras todo el tiempo la conexion a base de datos el consumo de memoria se dispará y chau aplicación. Tenes que usar un singleton.

Lo que podes hacer es crear una clase que herede de SQLiteOpenHelper y agregar un metodo static synchronized para verifiicar si existe una instancia de la base de datos, si existe la retorna, si no instancia la clase.

Código Java:
Ver original
  1. public class DatabaseHelper extends SQLiteOpenHelper {
  2.  
  3.   private static DatabaseHelper sInstance;
  4.  
  5.   private static final String DATABASE_NAME = "database_name";
  6.   private static final String DATABASE_TABLE = "table_name";
  7.   private static final int DATABASE_VERSION = 1;
  8.  
  9.   public static synchronized DatabaseHelper getInstance(Context context) {
  10.  
  11.     // Use the application context, which will ensure that you
  12.     // don't accidentally leak an Activity's context.
  13.     // See this article for more information: http://bit.ly/6LRzfx
  14.     if (sInstance == null) {
  15.       sInstance = new DatabaseHelper(context.getApplicationContext());
  16.     }
  17.     return sInstance;
  18.   }
  19.  
  20.   /**
  21.    * Constructor should be private to prevent direct instantiation.
  22.    * make call to static method "getInstance()" instead.
  23.    */
  24.   private DatabaseHelper(Context context) {
  25.     super(context, DATABASE_NAME, null, DATABASE_VERSION);
  26.   }
  27. }

Luego en el activity, fragment o service, creas una variable de clase, haces referencia a la instancia de tu SQLiteOpenHelper. Finalmente en en onStop() verificas si existe la instancia, si es true, la cerras.

Etiquetas: aplicacion, bd, concurrencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:41.