sql >> Base de Datos >  >> RDS >> SQLite

Lectura de una base de datos de la carpeta de activos

Para utilizar una base de datos empaquetada (es decir, una incluida como activo) para un uso completo, la base de datos debe descomprimirse (automáticamente) y copiarse en una ubicación adecuada (la mayoría de las veces data/data/<package_name>/databases/<database_name> donde <package_name> y <database_name> será de acuerdo con el nombre del paquete de la aplicación y el nombre de la base de datos respectivamente).

Para "empaquetar", la base de datos debe incluirse en la carpeta de activos y preferiblemente en una carpeta de bases de datos (obligatorio si se usa SQLiteAssetHelper sin modificaciones ).

Además, la copia debe realizarse antes de abrir la base de datos, después de lo cual se puede abrir.

Uso de SQLiteAssetHelper

  1. El primer paso es crear la base de datos que se empaquetará, esto no se cubrirá, ya que hay numerosas herramientas disponibles. Para este ejemplo, la base de datos es un archivo llamado test.db

  2. Luego debe crear su proyecto en este caso, el Proyecto se ha llamado DBtest con un Company Domian como com.DBtest entonces el nombre del paquete es dbtest.com.dbtest .

  3. El siguiente paso es copiar la base de datos en la carpeta de activos.

    1. Creación de los activos carpeta en src/main carpeta, si aún no existe.
    2. Crear la carpeta bases de datos"" en **activos carpeta, si aún no existe.
    3. Copiando el archivo de la base de datos (test.db en este ejemplo) en la carpeta de la base de datos.

  4. La siguiente etapa es configurar el proyecto para utilizar SQLiteAssetHelper incluyéndolo en el build.gradle de la aplicación. .

    1. Edite el build.gradle en la aplicación carpeta.
    2. Agregue la línea implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' dentro de la sección de dependencias.
    3. Haga clic en Sincronizar ahora

  1. Cree una clase que sea una subclase de la clase SQLiteAssethelper nueva/ahora disponible. Para este ejercicio se llamará DBHelper .

    1. Haga clic derecho en Actividad principal clase java, seleccione Nuevo y luego Clase Java.
    2. En el campo Nombre, ingrese DBHelper .
    3. En el campo SuperClass, comience a escribir SQLiteAsset (ahora se podrá seleccionar la clase SQliteAssetHelper), así que selecciónela. Debe resolver ser:-
    4. Haga clic en Aceptar.
  2. Cree el constructor para la clase DBHelper siguiendo las líneas de

:-

public class DBHelper extends SQLiteAssetHelper {

    public static final String DBNAME = "test.db"; //<<<< must be same as file name
    public static final int DBVERSION = 1;

    public DBHelper(Context context) {
        super(context,DBNAME,null,DBVERSION);
    }
}
  1. Cree una instancia de DBHelper y luego acceda a la base de datos.

    1. Nota para facilitar otra clase llamada CommonSQLiteUtilities , copiado de ¿Hay algún método que ayude a resolver problemas comunes de SQLite?
    2. Cree una instancia de la cclass DBHelper usando algo similar a

      • DBHelper mDBHlpr = new DBHelper(this);
    3. usando CommonSQLiteUtilities, se accedió a la base de datos usando:-

      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    4. MainActivity en su totalidad se convirtió en

:-

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHelper mDBHlpr = new DBHelper(this);
        CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    }
}

El resultado fue un registro de ejecución exitoso :-

04-11 06:12:55.091 1401-1401/dbtest.com.dbtest W/SQLiteAssetHelper: copying database from assets...
    database copy complete
04-11 06:12:55.123 1401-1401/dbtest.com.dbtest I/SQLiteAssetHelper: successfully opened database test.db
04-11 06:12:55.127 1401-1401/dbtest.com.dbtest D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/dbtest.com.dbtest/databases/test.db
    Database Version = 1
    Table Name = mytable Created Using = CREATE TABLE mytable (
        _id INTEGER PRIAMRY KEY, 
        mydata TEXT, 
        inserted INTEGER DEFAULT CURRENT_TIMESTAMP
    )
    Table = mytable ColumnName = _id ColumnType = INTEGER PRIAMRY KEY Default Value = null PRIMARY KEY SEQUENCE = 0
    Table = mytable ColumnName = mydata ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
    Table = mytable ColumnName = inserted ColumnType = INTEGER Default Value = CURRENT_TIMESTAMP PRIMARY KEY SEQUENCE = 0
    Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
    Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
  • Las dos primeras líneas son de SQliteAssethelper , el resto son de logDatabaseInfo método de CommonSQLiteUtilities clase.
  • En las ejecuciones posteriores, la base de datos no se copiará porque ya existe.