Développement Android-Base de données SQLite

  Nous avons déjà parlé de la façon de stocker des données dans des fichiers, donc en dehors de cette méthode, il est courant de stocker des données dans des bases de données que tout le monde connaît.

  Avantages du stockage des données dans une base de données :

    1) Les données stockées dans la base de données sont plus pratiques à utiliser, telles que l'ajout, la suppression, la modification, la vérification, etc.

    2) La restauration des transactions peut être réalisée, comme les virements bancaires, etc.

    3) Entretien facile et haute lisibilité

    4) Faible utilisation des ressources et hautes performances

    5)……

  Les bases de données SQLite manquent partout dans notre vie quotidienne, comme nos téléphones mobiles ~ les téléphones mobiles sur le marché utilisent désormais les bases de données SQLite comme stockage de données.

  Et les maisons intelligentes que nous voyons souvent utilisent également des bases de données SQLite pour enregistrer des données. Et les programmes de bureau que nous utilisons souvent, tels que QQ, Thunder, etc.

1. Le concept et les avantages et inconvénients de la base de données SQLite

  La base de données SQLite est un moteur de base de données embarqué open source, et chacune de ses bases de données existe sous la forme d'un fichier unique

  Ces données sont stockées sur le disque sous la forme d'une structure de données B-Tree.

  La base de données SQLite est un petit fichier qui peut être ouvert et exécuté directement, tandis que d'autres bases de données sont une application volumineuse.

  Avantages d'utiliser SQLite :

    1. SQLite prend en charge la plupart des instructions standard sql

      Ajouter, supprimer, modifier, vérifier, effectuer une transaction, etc., donc je n'en parlerai pas en détail ici...

    2. Léger

      On peut dire qu'il est de poche, mais le petit SQLite peut prendre en charge des bases de données jusqu'à 2 To.

    3. Vitesse de recherche rapide

    4. Modèle de données dynamique (type faible)

      Prise en charge de la base de données SQLite

        NULL : valeur vide

        INTEGER : type entier

        REAL : virgule flottante

        TEXTE : texte de la chaîne

        BLOB : objet binaire

      5 types de données de base.

      La raison pour laquelle il est appelé "type faible" est que, quel que soit le type de données, il sera automatiquement converti lors de l'insertion des données.

      Remarque : Lorsque la contrainte de INTEGER est PRIMARY KEY, elle doit être un entier et ne sera pas automatiquement convertie, sinon une erreur sera signalée !

    5. La base de données SQLite n'a pas besoin d'être installée et configurée avant utilisation, ni d'activer le processus pour démarrer et fermer la base de données

    6. Occupe moins de ressources système

    7. Multiplateforme

      Il peut être utilisé sous plusieurs systèmes d'exploitation sans qu'il soit nécessaire d'écrire du code indépendamment pour un certain système d'exploitation, c'est-à-dire que sa couche de données est la même dans chaque système d'exploitation ;

      Dans le même temps, il est également déterminé par le mécanisme interne de la base de données SQLite.La base de données SQL s'exécute sur la machine virtuelle SQLite.

      Sur la machine virtuelle, il sera directement traduit et compilé en modèles de données de différents systèmes d'exploitation.

  Les inconvénients de SQLite sont :

    1. Ne prend pas en charge les grands projets

    2. Certaines instructions standard SQL ne sont pas prises en charge, mais ces instructions ne sont généralement pas utilisées...

    3. Par rapport à d'autres grandes bases de données, la sécurité est médiocre

      Par rapport à nos téléphones Android, tant que vous obtenez les autorisations root, cela prouve que vous pouvez faire ce que vous voulez...

      Alors comment Android renforce-t-il sa sécurité ?

        a. Améliorer la vérification de la sécurité du programme

        b. Renforcer la rigueur du code

        c. Gestion de l'autorité

 

  En raison des avantages de la base de données SQLite, de nombreuses applications de bureau l'utilisent pour stocker les données de l'application ;

  Bien sûr, nos chaînes de produits Android et iPhone utilisent presque toutes des bases de données SQLite.

 

2. Implémentation sous Android

   1. Utiliser des méthodes natives pour effectuer des opérations simples sur la base de données

    C'est-à-dire écrire du code SQL directement

    a. Définissez une méthode et héritez de la classe SQLiteOpenHelper. Et implémentez les méthodes onCreate et onUpgrade, et remplacez les méthodes personnalisées.

      Ignorer les méthodes personnalisées :

        1) Il existe de nombreux paramètres, il suffit donc ici de n'avoir besoin que du paramètre de contexte.

        2) super paramètres :

          contexte : contexte

          nom : nom de la base de données

          factory : le but de la création d'objets curseur

          version : version de la base de données, généralement à partir de 1

      méthode onCreate :

        1) Il est utilisé lorsque la base de données est créée pour la première fois, si c'est la deuxième, elle est ouverte

        2) Convient pour l'initialisation de la structure de la table

      méthode onUpgrade :

        1) Utilisé lorsque la version de la base de données est mise à jour

        2) Convient pour mettre à jour la structure de la table

      execSQL:

        L'instruction sql à exécuter convient pour l'ajout, la suppression et la modification

 

copier le code
public class MyOpenHelper étend SQLiteOpenHelper { 

    /** 
     * 
     * @param contexte contexte 
     * nom nom de la base de données 
     * objectif de l'usine pour créer l'objet curseur 
     * version la version de la base de données commence à partir de 1 
     */ 
    public MyOpenHelper(Context context) { 
        super(context, "test_1. db ", null, 3); 
    } 

    /** 
     * Lorsque la base de données est créée pour la première fois 
     * Cette méthode est particulièrement adaptée pour initialiser la structure de la table. La création d'une table consiste à écrire une instruction sql 
     */ 
    @Override 
    public void onCreate (SQLiteDatabase db) { 

        db.execSQL("create table test_info(id integer primary key autoincrement,name varchar(20))"); } / ** 
    * 

    Utilisé 
     lorsque la version de la base de données est mise à niveau  
     * Cette méthode convient pour mettre à jour la table structure
     */
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

        db.execSQL("alter table test_info add phone varchar(20)"); 
    } 

}
copier le code

 

    b. Il faut prêter attention au downgrade onDowngrade de la base de données, les points clés de conception du downgrade

      1) Envisagez le cloud pour économiser les utilisateurs [données personnalisées, habitudes de comportement]. Profil de terme professionnel ->> améliorer la viscosité de l'utilisateur

      2) Tenez compte des exigences de version minimales actuelles ->> réduisez les coûts de maintenance

      3) Transfert de données local autant que possible (toutes les nouvelles versions ne suppriment pas les champs) -> transformer autant que possible les inconnues en connues

 4) Le downgrade est susceptible d'échouer, donc on try-catch      en général ; quand le downgrade réussit, c'est l'instruction du bloc try, et l'instruction du bloc catch est exécutée après l'échec

      5) SQLiteDatabase (instruction d'exécution), oldVersion (ancien numéro de version), newVersion (nouveau numéro de version)

 

copier le code
/* La simulation passera de 3.0 à 2.0 */ 
    @Override 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        //Normalement parlant, s'il est supérieur à 2.0, il devrait y avoir une table test_info, et les champs en 2.0 sont tous en 3.0 Yes 
        try { 
            //Tout d'abord, renommer d'abord la future table de test_info 
            String rename_sql = "alter table test_info rename to test_info_bak"; 
            db.execSQL(rename_sql); 
            Log.i("down", "1. Renommé avec succès") ; 
            //Deuxièmement, créez une structure de table 2.0 
            String sql_message = "créer une table test_info (id int clé primaire, tou1 varchar(50), userName varchar(50), 
                    lastMessage varchar(50), datetime varchar(50) )" ; db.execSQL(sql_message); Log.i("down", "2.Créer une structure de table 2.0 avec succès"); // Troisièmement, copiez les données de sauvegarde dans la table 2.0 nouvellement créée String sql_copy = "insert into test_info select id,tou1,userName,lastMessage,datetime from test_info_bak" ; db.execSQL(sql_copy); Log.i(" down", "3.copy user data to 2.0 table" ); //Quatrièmement, supprimez la table de sauvegarde String drop_sql = "supprimez la table si elle existe test_info_bak" ; db.execSQL(drop_sql); Log.i(" down", "4. Drop la table de sauvegarde"); } catch (Exception e) { //Failure Log.i("hi", "Échec de la rétrogradation, rétablissement"); String sql_drop_old_table = "supprimer la table si elle existe test_info " ; String sql_message = "créer une table test_info (auto-incrémentation de la clé primaire entière id, nom varchar (20), téléphone varchar (20))" ; String sql_init_1 = "insérer dans les valeurs test_info (1,'abc','130000')" ; String sql_init_2 = "insérer dans les valeurs test_info (2,'abc','134444')" ; db.execSQL(sql_drop_old_table); db.execSQL(sql_message); db.execSQL(sql_init_1); db.execSQL(sql_init_2); } }
copier le code

 

    c. Créer un objet MyOpenHelper

 

myOpenHelper = new MyOpenHelper(getApplicationContext()); 

//Ouvrir ou créer une base de données si elle est créée pour la première fois, puis ouvrir 
//SQLiteDatabase sqliteDatabase = myOpenHelper.getWritableDatabase(); 
//Ouvrir ou créer une base de données si c'est la Créez la première fois, puis ouvrez et retournez en lecture seule si le disque est plein 
//SQLiteDatabase sqliteDatabase = myOpenHelper.getReadableDatabase();

 

    d. Augmenter les données

 

//Obtenir l'objet de base de données 
SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
//Exécuter et ajouter une instruction sql 
db.execSQL("insert into test_info(name,phone) values(?,?)",new Object[]{" zhangsan" ,"138888888"}); 
// ferme la base de données lorsqu'elle est épuisée 
db.close();

 

    e. Supprimer des données

 

SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
db.execSQL("delete from test_info where name=",new Object[]{"zhangsan"}); 
db.close();

 

    f. Modifier les données

 

SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
db.execSQL("updata test_info set phone=? where name=?",new Object[]{"13777777777","zhangsan"}); 
db.close();

 

    g. Interroger les données

 

copier le code
SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 

        Curseur curseur = db.rawQuery("select * from test_info", null); 

        if(cursor!=null&&cursor.getCount()>0){ 
            while(cursor.moveToNext()){ 
                //columnIndex代表列的索引
                String name = cursor.getString(1); 
                Téléphone de chaîne = curseur.getString(2); 
            } 
        }
copier le code

 

 

  2. Utilisez l'API packagée par Google pour effectuer des opérations simples sur les données

    Les ingénieurs de Google ont emballé certaines méthodes que nous pouvons appeler directement, mais en fait, au niveau inférieur, ces chaînes sont épissées dans des instructions SQL complètes.

 

    a. Augmenter les données

      Une collection de cartes encapsulée dans ContentValues, qui stocke les données sous la forme de <clé, valeur>.

      insérer la description du paramètre

        table : nom de la table

        key : le nom de la colonne correspondante

        valeur : la valeur correspondante

      mettre la description du paramètre

        clé : le nom de la colonne ajoutée

        valeur : la valeur correspondante

 

copier le code
//Obtenir l'objet de base de données 
SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
/** 
* table table name 
* ContentValues ​​​​encapsule une carte à l'intérieur 
* key : le nom de la colonne correspondante    
* value : la valeur correspondante 
*/ 
ContentValues values ​​= new ContentValues(); 
values.put("name", "wangwu"); 
values.put("phone", "120"); 
//La valeur de retour représente l'id de la nouvelle ligne insérée 
long insert = db.insert("test_info", null, values ​​);//La couche inférieure fusionne les instructions SQL 
//Ferme la base de données lorsqu'elle est épuisée 
db.close(); 

if(insert>0){ 
    Toast.makeText( getApplicationContext(), "Ajouté avec succès !", 3000).show()   ; 
}else{ 
    Toast.makeText(getApplicationContext(), "Échec de l'ajout !", 3000).show(); 
}
copier le code

 

    b. Supprimer des données

      supprimer la description du paramètre

        table : nom de la table

        whereClause : quelle colonne supprimer, en fonction de ce qu'il faut supprimer

        whereArgs : ce qui est renvoyé ici est un objet tableau, en fonction de la valeur de la colonne supprimée

 

SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
//Suppression selon l'API packagée de Google 
int delete = db.delete("test_info", "name=?", new String[]{"wangwu"}); 
db.close( ) Toast.makeText 
(getApplicationContext(), "Ligne "+delete+" supprimée", 2000).show();

 

    c. Modifier les données

      mettre à jour la description du paramètre

        table : nom de la table

        valeur : est la valeur dans ContentValues

        whereClause : Quelle colonne modifier, selon quelle modification

        whereArgs : Voici un objet tableau, selon la valeur de la colonne modifiée

 

copier le code
SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 

//Modifier ContentValues ​​​​selon l'API packagée de Google value = new ContentValues(); value.put("phone", "110"); //Représente le nombre de lignes mises à jour int updata = db .update("test_info", value, "name=?", new String[]{"wangwu"}); db.close(); Toast.makeText (getApplicationContext ( ), "updated"+updata+"line ", 2000).show();
copier le code

 

    d. Interroger les données

      description du paramètre de requête

        table : nom de la table

        colonnes : les colonnes de la requête

        sélection : selon quelle requête

        selectionArgs : la valeur de la condition de requête

        groupBy : regroupement

        avoir : conditions de requête, ici nous devons distinguer la différence entre avoir et où !

        orderBy : trier

      moveToNext() : parcourir les données dans la table de données

      curseur : l'objet pointeur encapsulé par les ingénieurs de Google, utilisé pour parcourir l'indice de la collection

 

copier le code
SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 
        
/** 
 * Requête basée sur l'API packagée de Google 
* les colonnes représentent les colonnes que vous souhaitez interroger 
* sélection Interroger le téléphone en fonction de quoi 
*/ 
Curseur curseur = db.query("test_info", nouvelle chaîne [ ]{"phone"}, "name=?", new String[]{"wangwu"}, null, null, null); if(cursor!=null &&cursor.getCount()>0){ while( 

cursor 
     . moveToNext( )){ 
    
    
          String phone = curseur.getString(0); 
          System.out.println("phone:" + phone); 
     } 
}
copier le code

 

 

  3. Avantages et inconvénients de l'utilisation de méthodes natives et de méthodes API packagées

    a. Avantages des méthodes natives

      1) Vous pouvez utiliser les instructions SQL de manière plus flexible

      2) La quantité de code peut être réduite et l'efficacité est plus élevée

    b. Inconvénients des méthodes natives

      1) Il est facile d'écrire un mauvais code sql

      2) Pas facile à entretenir

    C. Avantages d'un bon emballage

      1) Il n'est pas nécessaire d'écrire directement des instructions sql, ce qui réduit la probabilité d'erreurs

      2) Entretien facile

    d. Inconvénients d'un bon emballage

      1) Rendre le programme plus lourd et moins efficace

      2) Il n'est pas pratique d'exploiter des données et ne peut pas utiliser de manière flexible les instructions d'opération de données

    Quelle que soit la méthode utilisée, elle a ses avantages et ses inconvénients, donc dans le développement réel, cela dépend de la situation réelle, et toute méthode que vous souhaitez utiliser est également réalisable.

    Suggestion : pour les petits programmes, il est recommandé d'utiliser des API packagées, qui sont relativement simples et peuvent améliorer l'efficacité du développement.

       Il est recommandé d'utiliser des méthodes natives pour les programmes relativement volumineux, qui sont plus flexibles et peuvent également améliorer l'efficacité du programme

 

3. Résumé

  1. Avantages et inconvénients de l'utilisation de SQLite

  2. Mise à niveau et rétrogradation de la base de données (*****)

  3. Utilisez des méthodes natives pour effectuer des opérations simples sur la base de données

  4. Utilisez l'API packagée par Google pour effectuer des opérations simples sur la base de données

  5. Avantages et inconvénients de chacun

  6. La couche de données des chaînes de produits Android et iPhone est la même

  

 

  ps : Les étudiants intéressés peuvent penser à WeChat :

    Comment SQLite est-il implémenté côté client ?

    Qu'est-ce qui est utilisé pour y parvenir dans le serveur d'arrière-plan et comment y parvient-il ?

    Qu'en est-il de l'interaction de ces données ?

    Comment l'optimiser ?

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_33505204/article/details/78451839
conseillé
Classement