Stockage et accès aux données - voir aussi la base de données SQLite


Introduction à cette section :

Après avoir étudié la section précédente, vous maîtrisez déjà les opérations de base de SQLite sous Android, et dans cette section nous apprendrons Quelques éléments légèrement plus avancés, les transactions de base de données, comment stocker des données binaires volumineuses dans la base de données et lors de la mise à niveau de la version Comment gérer la base de données ! Bon, commençons cette section !


Transaction SQLite

1.png

Pour faire simple : toutes les opérations de base de données écrites dans la transaction sont réussies et la transaction est commit , sinon, l'annulation de la transaction signifie revenir à la précédente Statut - lorsqu'aucune opération de base de données n'est effectuée ! De plus, nous avons également mentionné plus tôt que dans le répertoire data/data/<package name>/database/ En plus du fichier db que nous avons créé, il existe également un fichier xxx.db-journal, qui est utilisé pour permettre à la base de données de prendre en charge les transactions. Fichiers journaux temporaires générés !


2. SQLite stocke de gros fichiers binaires

Bien sûr, nous stockons généralement rarement de gros fichiers binaires dans la base de données, tels que des images, de l'audio, des vidéos, etc. est le chemin du fichier de stockage, mais il y a toujours des besoins étranges. Un jour, vous voudrez soudainement enregistrer ces fichiers dans la base de données. L'image est un exemple, enregistrez l'image dans SQLite et lisez l'image dans SQLite !

2.png


3. SimpleCursorAdapter lie les données de la base de données

Bien sûr, c'est bien pour le plaisir, mais il n'est pas recommandé de l'utiliser, bien que ce soit est très simple à utiliser ! En fait, lorsque nous parlons de ContentProvider, nous avons utilisé cette chose pour lier la liste de contacts ! Je n’écrirai aucun exemple ici. Accédez directement au code principal ! Vous pouvez simplement le bricoler vous-même si vous en avez besoin. De plus, de nos jours, nous écrivons généralement rarement des éléments de base de données par nous-mêmes. , généralement via des frameworks tiers : ormlite, greenDao, etc. Dans la partie avancée, nous réapprendrons ~

3.png


Quelques points forts de la mise à niveau de la base de données

4. 🎜>

PS : Eh bien, je n'ai jamais fait cela auparavant. J'ai toujours une expérience de projet insuffisante. Les produits de l'entreprise sont tous basés sur le positionnement. Je viens de visiter l'entreprise. projet, j'ai trouvé que le code laissé par les prédécesseurs est le suivant : onCreate() crée une base de données, puis onUpgrade() supprime la base de données précédente, puis Appelez à nouveau la méthode onCreate() ! Après avoir lu plusieurs versions du code, j'ai constaté qu'il n'y avait pas d'opération de mise à niveau de la base de données... Je n'ai rien à apprendre. Je ne peux que me référer aux pratiques d'autres personnes. Vous trouverez ci-dessous quelques conclusions de l'examen des informations par Xiaozhu. S'il y a quelque chose qui ne va pas, veuillez le signaler. Peut-être que certains frameworks tiers l'ont déjà fait, mais en raison de contraintes de temps, je n'entrerai pas dans les détails ! Vous pouvez laisser un message si vous le savez, merci ! <🎜>

1) Qu'est-ce que la mise à niveau de la version de la base de données ? Comment mettre à niveau ?

Réponse : Si nous développons une application et utilisons une base de données, nous supposons que la version de la base de données est la v1.0. Dans cette version, nous avons créé un fichier de base de données x.db et nous avons créé la première table via la méthode onCreate(). t_user, il y a deux champs : _id, user_id ; plus tard, nous voulons ajouter un champ user_name, cette fois Nous devons modifier la structure de la table de la base de données, et nous pouvons mettre à jour la base de données onUpgrade() Dans la méthode, il suffit de modifier le numéro de version lors de l'instanciation du SQLiteOpenHelper personnalisé, par exemple en changeant 1 en 2 De cette façon, la méthode onUpgrade() sera automatiquement appelée ! De plus, pour chaque version de la base de données, nous devrions faire du bon travail L'enregistrement (document) correspondant est semblable au suivant :

数据库版本andoid对应版本内容
v1.01第一个版本,包含两个字段...
v1.12数据保留,新增user_name字段

2) Quelques questions et solutions associées

① Les fichiers de la base de données seront-ils supprimés lors de la mise à niveau de l'application ?

R : Non ! Les données et tout est là !

② Si ​​je souhaite supprimer un champ du tableau ou ajouter un nouveau champ, les données d'origine sont-elles toujours là ?

R : Oui !

③ Pouvez-vous publier la manière grossière de mettre à jour la version de la base de données que vous venez de mentionner sans conserver les données ?

Réponse : Oui, l'ormlite tiers est utilisé ici. Vous pouvez également écrire vous-même le code pour la création et la suppression de la base de données :

4.png.

④Par exemple, si nous sommes passés à la troisième version, nous avons ajouté un tableau à la deuxième version, puis à la troisième version Un tableau a également été ajouté . Les utilisateurs peuvent passer directement de la première version à la troisième version. De cette façon, n'aura pas le tableau ajouté sans passer par la deuxième version.

Réponse : Très simple, on peut écrire un switch() dans onUpgrade(), la structure est la suivante :

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
            int arg2, int arg3) {
    switch(arg2){
        case 1:
            db.execSQL(第一个版本的建表语句);
        case 2:
            db.execSQL(第二个版本的建表语句);
        case 3:
            db.execSQL(第三个版本的建表语句); 
    }
}
Si vous faites attention, vous constaterez peut-être que break est Ce n'est pas écrit ici, c'est donc le cas. En passant, cela permet de garantir que lors de la mise à niveau entre les versions, chaque fois que la base de données Toutes les modifications peuvent être mises en œuvre ! Cela garantit que la structure de la table est à jour ! De plus, il ne s’agit pas nécessairement d’une instruction visant à créer une table ou à modifier la structure de la table. C'est bien aussi !


⑤La conception de l'ancienne table est dommage, de nombreux champs doivent être modifiés et il y a trop de changements. Je souhaite créer une nouvelle table. mais le nom de la table doit être le mêmeEt certaines données précédentes doivent être enregistrées dans une nouvelle table !

Réponse : Haha, je m'agenouille pour vous. Bien sûr, il existe des solutions. Voici les idées :

1. : ALTER TABLE User RENAME TO _temp_User;

2. Créez une nouvelle table :CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4) );

3. Importer des données ; INSERT INTO User SELECT u_id,u_name,"18" FROM _temp_User; // S'il n'y a rien dans la table d'origine, vous devez définissez vous-même une valeur par défaut

4. Supprimez la table temporaire DROP TABLE_temp_User;


Résumé de cette section :

D'accord, dans cette section, nous discuterons des transactions SQLite, du grand stockage binaire, de SimpleCursorAdapter et des mises à niveau de la base de données. Certaines questions ont été explorées, et à propos de SQLite, nous avons appris beaucoup de choses pour le moment, sur l'utilisation de tiers, et Nous étudierons avec vous quelques sujets avancés lorsque nous arriverons aux niveaux avancés~ C'est tout pour cette section, merci~