Tâche 1 : Étendre SQLiteOpenHelper pour créer et remplir une base de données¶
Les applications Android peuvent utiliser les bases de données SQLite standard pour stocker des données. Cet exercice pratique n'enseigne pas SQLite, mais montre comment l'utiliser dans une application Android.
SQLOpenHelper est une classe utilitaire du SDK Android permettant d'interagir avec un objet base de données SQLite. Elle inclut les méthodes onCreate() et onUpdate() que vous devez implémenter, ainsi que les méthodes pratiques d'insertion, de suppression, de mise à jour et d'interrogation pour toutes vos interactions avec la base de données.
La classe SQLOpenHelper se charge d'ouvrir la base de données si elle existe, de la créer si elle n'existe pas et de la mettre à jour si nécessaire.
Remarque
Vous pouvez avoir plusieurs bases de données par application et plusieurs assistants ouverts pour les gérer. Cependant, envisagez de créer plusieurs tables dans la même base de données au lieu d'utiliser plusieurs bases de données pour des raisons de performances et de simplicité architecturale.
1 Créer une classe squelette WordListOpenHelper¶
La première étape pour ajouter une base de données à votre code consiste toujours à créer une sous-classe de SQLiteOpenHelper et à implémenter ses méthodes.
-
Créez une nouvelle classe Java
WordListOpenHelperavec la signature suivante. -
Dans l'éditeur de code, survolez l'erreur, puis cliquez sur l'image de l'ampoule et sélectionnez Implémenter les méthodes. Assurez-vous que les deux méthodes sont mises en surbrillance et cliquez sur OK.
-
Ajoutez le constructeur manquant pour
WordListOpenHelper. (Vous définirez ensuite les constantes non définies.)
2 Ajouter des constantes de base de données à WordListOpenHelper¶
-
En haut de la classe
WordListOpenHelper, définissez les constantes pour les tables, les lignes et les colonnes comme indiqué dans le code ci-dessous. Cela devrait éliminer toutes les erreurs. -
Exécutez votre code pour vous assurer qu'il ne contient plus d'erreurs.
3 Construisez la requête SQL et le code pour créer la base de données¶
Les requêtes SQL peuvent devenir assez complexes. Il est recommandé de construire les requêtes séparément du code qui les utilise. Cela améliore la lisibilité du code et facilite le débogage.
Continuez à ajouter du code à WordListOpenHelper.java :
-
Sous les constantes, ajoutez le code suivant pour construire la requête. Reportez-vous au SQLite Primer si vous avez besoin d'aide pour comprendre cette requête.
-
Ajoutez des variables d'instance pour les références aux bases de données accessibles en écriture et en lecture. Le stockage de ces références vous évite d'avoir à obtenir une référence de base de données à chaque fois que vous avez besoin de lire ou d'écrire.
-
Dans la méthode
onCreate, ajoutez du code pour créer une base de données et la table (la classe d'assistance ne crée pas d'autre base de données, si elle existe déjà.) -
Corrigez l'erreur en renommant l'argument de la méthode de
SQLiteDatabaseendb.
4 Créer la base de données dans onCreate de MainActivity¶
Pour créer la base de données, créez une instance de la classe WordListOpenHelper que vous venez d'écrire.
-
Ouvrez
MainActivityet ajoutez une variable d'instance pour l'assistant ouvert : -
Dans
onCreate, initialisezmDBavec une instance deWordListOpenHelper. Ceci appelleonCreatedeWordListOpenHelper, qui crée la base de données. -
Ajoutez un point d'arrêt, exécutez l'application avec le débogueur et vérifiez que
mDBest une instance deWordListOpenHelper.
5 Ajouter des données à la base de données¶
La liste de mots de votre application peut provenir de nombreuses sources. Elle peut être entièrement créée par l'utilisateur, téléchargée depuis Internet ou générée à partir d'un fichier faisant partie de votre APK. Pour cet exercice pratique, vous allez alimenter votre base de données avec une petite quantité de données codées en dur. Notez que l'acquisition, la création et le formatage des données sont un sujet entièrement distinct qui n'est pas traité dans ce cours.
- Ouvrez
WordListOpenHelper. -
Dans
onCreate, après avoir créé la base de données, ajoutez un appel de fonction àEnsuite, implémentez la méthode
fillDatabaseWithData()dansWordListOpenHelper. -
Implémentez le stub de méthode.
-
À l'intérieur de la méthode, déclarez une chaîne de mots comme données fictives.
-
Créez un conteneur pour les données. La méthode insert que vous appellerez ensuite nécessite que les valeurs remplissent une ligne en tant qu'instance de ContentValues. Un ContentValues stocke les données d'une ligne sous forme de paires clé-valeur, où la clé est le nom de la colonne et la valeur est la valeur à définir.
-
Ajoutez la clé/valeur de la première ligne à values, puis insérez cette ligne dans la base de données. Répétez l'opération pour tous les mots de votre tableau de mots.
-
db.insert est une méthode pratique SQLiteDatabasepour insérer une ligne dans la base de données. (C'est une méthode pratique, car vous n'avez pas à écrire la requête SQL vous-même.)
- Le premier argument de db.insert est le nom de la table,
WORD_LIST_TABLE. - Le deuxième argument est un
String nullColumnHack. C'est une solution de contournement SQL qui vous permet d'insérer des lignes vides. Voir la documentation de insert(). Utilisez null pour cet argument. -
Le troisième argument doit être un conteneur ContentValues avec des valeurs pour remplir la ligne. Cet exemple n'a qu'une seule colonne "words" comme représenté par la constante
KEY_WORDdéfinie précédemment ; pour les tables avec plusieurs colonnes, ajoutez les valeurs de chaque colonne à ce conteneur. -
Avant d'exécuter et de tester votre application, vous devez effacer les données de votre base de données SQLite et supprimer la base de données. Ensuite, nous pouvons exécuter notre application et la recréer afin que la base de données soit initialisée avec les données de départ. Vous pouvez désinstaller l'application de votre appareil, ou vous pouvez effacer toutes les données de l'application depuis Paramètres > Applications > Liste de mots > Stockage > Effacer les données sur votre émulateur Android ou appareil physique
-
Exécutez votre application. Vous ne verrez aucun changement dans l'interface utilisateur.
-
Vérifiez les journaux et assurez-vous qu'il n'y a pas d'erreurs avant de continuer. Si vous rencontrez des erreurs, lisez attentivement les messages logcat et utilisez des ressources, telles que Stack Overflow, si vous êtes bloqué.
- Vous pouvez également vérifier dans les paramètres que le stockage des utilisateurs de l'application.
Félicitations !
Vous avez complété la tâche 1. Vous avez créé une base de données SQLite, créé une table et inséré des données dans la table. N'oubliez pas de committer sur la branche tp-sqlite de votre dépot git local. Et de poster une capture d'écran de votre application en fonctionnement dans les commentaires de votre PR.