Se abren varias bases de datos de Android

Estoy haciendo un cliente de mensajería instantánea para Android y estoy trabajando con bases de datos para almacenar los contactos y otras informaciones … En mi aplicación tengo una actividad y un servicio. Necesito abrir tres bases de datos en el mismo tiempo, tanto en el servicio como en la actividad.

Utilizo tres bases de datos porque quiero que las bases de datos se gestionen más fácilmente sin tener problemas con la sincronización de la escritura en ellos. (Por lo que sé que tengo que escribir en la base de datos sincrónicamente porque puede aplastar).

Para gestionar las bases de datos del servicio y de la actividad en el mismo tiempo, pensé que un singleton o una clase estática de DatabaseHelper podría ayudarme …

Así que he empezado a hacer una prueba haciendo dos objetos globales de base de datos en la actividad, cada uno abre una base de datos diferente, después de ejecutar el proyecto he notado que la última base abierta permanece abierta en ambos objetos: ((¿por qué es esto ¿sucediendo?

¿Puede alguien sugest me cómo puedo hacer este trabajo? ¡Gracias!

LE: después de más pruebas, hice un objeto estático de databasehelper, abrir un servicio del cual tomo el objeto de la base de datos de la actividad y al mismo tiempo hice dos para las sentencias, una en actividad y una en servicio que se ejecutan de 0 a 3000 Y agrega algunos valores a la misma base de datos y luego lee la base de datos.

Después de esta ejecución me di cuenta de que la base de datos está todavía en pies y corriendo sin errores. Lo extraño es que el servicio para se ejecuta sólo después de la actividad para terminar el trabajo. ¿Porqué es eso? ¡Gracias!

One Solution collect form web for “Se abren varias bases de datos de Android”

Tengo una clase DatabaseAdapter que contiene dos bases de datos que se abren juntos.

public class DatabaseAdapter { /** Identifier for the internal database */ public static final int INTERNAL = 0; /** Identifier for the external database */ public static final int EXTERNAL = 1; private final SQLiteOpenHelper[] mDatabaseManager = new SQLiteOpenHelper[2]; private final SQLiteDatabase[] mDatabases = new SQLiteDatabase[2]; /** * Constructs the database and open it. */ public DatabaseAdapter() { // Open the internal_db mDatabaseManager[INTERNAL] = new InternalDatabaseManager(MyApplication.getInstance()); mDatabases[INTERNAL] = mDatabaseManager[INTERNAL].getWritableDatabase(); } /** * Checks the database state and throws an {@link IllegalStateException} if database isn't open. * Should always be used before starting to access the database. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void checkDbState(int type) { if (mDatabases[type] == null || !mDatabases[type].isOpen()) { throw new IllegalStateException("The database has not been opened"); } } /** * Closes the database of the given type. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void close(int type) { if (mDatabases[type].isOpen()) { mDatabases[type].close(); mDatabases[type] = null; if (mDatabaseManager[type] != null) { mDatabaseManager[type].close(); mDatabaseManager[type] = null; } } } /** * @param type Type of the database. Can be INTERNAL or EXTERNAL. * @return true if the database is open, false otherwise. */ public boolean isOpen(int type) { return mDatabases[type] != null && mDatabases[type].isOpen(); } /** * Opens the default database. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void open(int type) { switch (type) { case INTERNAL: mDatabaseManager[INTERNAL] = new InternalDatabaseManager(MyApplication.getInstance()); if (!isOpen(INTERNAL)) { mDatabases[INTERNAL] = mDatabaseManager[INTERNAL].getWritableDatabase(); } break; case EXTERNAL: mDatabaseManager[EXTERNAL] = new ExternalDatabaseManager(MyApplication.getInstance(), Constants.EXTERNAL_DB_PATH, 1); if (!isOpen(EXTERNAL)) { mDatabases[EXTERNAL] = mDatabaseManager[EXTERNAL].getWritableDatabase(); } break; } } } 

Añadir un tercero debería ser fácil 🙂

  • No se puede degradar la base de datos de la versión 2 a 1 incluso después de una nueva instalación y volver a ejecutar
  • ¿Hay alguna forma más rápida de iterar a través de las filas de la consulta Sqlite?
  • androide sqlite cómo ordenar por el tiempo
  • Calcular la distancia entre dos puntos directamente en SQLite
  • Prácticas recomendadas para exponer varias tablas mediante proveedores de contenido en Android
  • Cómo contar el número de columnas en una tabla en SQLITE?
  • SQLite: No se puede enlazar argumento en el índice 1 porque el índice está fuera de rango. La sentencia tiene 0 parámetros
  • Cómo ocultar filas específicas de un cursor en android
  • Búsqueda de Android: Utilice tablas de FTS junto con tablas normales de SQLite DB
  • ¿Cómo se comprueba si existe una tabla en una base de datos SQLite de Android?
  • Sincronizar / actualizar bases de datos sqlite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.