Pour utiliser une base de données packagée (c'est-à-dire une base de données incluse en tant qu'actif) pour une utilisation complète, la base de données doit être décompressée (automatiquement) et copiée dans un emplacement approprié (le plus souvent data/data/<package_name>/databases/<database_name>
où <package_name>
et <database_name>
sera en fonction du nom du package de l'application et du nom de la base de données respectivement).
Pour "compresser", la base de données doit être incluse dans le dossier assets et de préférence dans un dossier databases (requis si vous utilisez SQLiteAssetHelper sans modification ).
De plus, la copie doit être effectuée avant d'ouvrir réellement la base de données, après quoi elle peut ensuite être ouverte.
Utilisation de SQLiteAssetHelper
-
La toute première étape consiste à créer la base de données à empaqueter, cela ne sera pas couvert, car il existe de nombreux outils disponibles. Pour cet exemple, la base de données est un fichier nommé test.db
-
Vous devez ensuite créer votre projet dans ce cas le projet a été appelé DBtest avec une Compnay Domian comme com.DBtest donc le nom du package est dbtest.com.dbtest .
-
L'étape suivante consiste à copier la base de données dans le dossier assets.
- Création des éléments dossier dans le dossier src/main dossier, s'il n'existe pas déjà.
- Création du dossier databases"" dans les **assets dossier, s'il n'existe pas déjà.
-
Copie du fichier de base de données (test.db dans cet exemple) dans le dossier de la base de données.
-
L'étape suivante consiste à configurer le projet pour utiliser SQLiteAssetHelper en l'incluant dans le build.gradle de l'application. .
- Modifier le build.gradle dans l'application dossier.
- Ajouter la ligne
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
dans la section des dépendances. - Cliquez sur Synchroniser maintenant
-
Créez une classe qui est une sous-classe de la classe SQLiteAssethelper nouvellement/maintenant disponible. Pour cet exercice, il s'appellera DBHelper .
- Cliquez avec le bouton droit sur MainActivity classe Java, sélectionnez Nouveau, puis Classe Java.
- Dans le champ Nom, saisissez DBHelper .
- Dans le champ SuperClass, commencez à taper SQLiteAsset (la classe SQliteAssetHelper sera désormais sélectionnable), alors sélectionnez-la. Il devrait se résoudre à :-
- Cliquez sur OK.
-
Créez le constructeur pour la classe DBHelper le long des lignes 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);
}
}
-
Créez une instance de DBHelper, puis accédez à la base de données.
- Remarque pour plus de facilité, une autre classe appelée CommonSQLiteUtilities , tel que copié à partir de Existe-t-il des méthodes permettant de résoudre les problèmes courants liés à SQLite ?
-
Créez une instance de la cclass DBHelper en utilisant quelque chose comme
DBHelper mDBHlpr = new DBHelper(this);
-
en utilisant CommonSQLiteUtilities, la base de données a été accédée en utilisant :-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
La MainActivity dans son intégralité est devenue
:-
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());
}
}
Le résultat a été une journalisation d'exécution réussie :-
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
- Les deux premières lignes proviennent de
SQliteAssethelper
, le reste provient delogDatabaseInfo
méthode deCommonSQLiteUtilities
classe. - Lors des exécutions suivantes, la base de données ne sera pas copiée car elle existe déjà.