SQLiteOpenHelper – Comment la firebase database est-elle créée?

Je fais une application de firebase database, et mon programme fonctionne et j’ai compris la plupart des tutoriels que j’ai suivis. Cependant, un aspect n’est pas clair pour moi.

Il existe une classe interne de MyDBHelper qui étend SQLiteOpenHelper. Les variables externes incluent la firebase database SQLite appelée d. Le code pour MyDBHelper est:

private static class MyDBHelper extends SQLiteOpenHelper { MyDBHelper(Context c) { super(c, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { db.execSQL(DATABASE_CREATE); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVers, int newVers) { Log.w(TAG, "Upgrading database from version " + oldVers + " to " + newVers + ", which will destroy all old data."); db.execSQL("DROP TABLE IF EXISTS GM"); onCreate(db); } } 

Ma question est de savoir comment cela crée réellement la firebase database initiale. Cela se produit dans la méthode onCreate (), mais pour autant que je sache, ceci n’est jamais appelé. Je comprends qu’elle est appelée lors de la première création de la firebase database, mais où? Et en outre, comment est-il passé une firebase database SQLiteDatabase? Je n’ai pas passé de firebase database à la méthode. Et comment ma variable de firebase database SQLiteDatabase de la classe externe est -elle définie sur la firebase database créée? Est-ce que quelqu’un pourrait me parler comme un idiot?

onCreate() et onUpgrade() sont réellement appelées la première fois que Db est créé. En fait, il est vérifié dans les getReadableDatabase() or getWritebleDatabase() de SQLiteOpenHelper . Il vérifiera si la firebase database existe déjà dans le répertoire de données et quelle est sa version. Selon cela, il appellera onCreate(), or onUpgrade() . Ou rien, si le fichier db existe et de la version correcte.

Vous pouvez rechercher votre code pour l’exécution de la firebase database myDBHelper.getReadable(Writable)Database() . C’est le moment où cette vérification sera effectuée.

S’il vous plaît laissez-moi savoir si plus de détails sont nécessaires. Bonne chance

N’oubliez pas que vous étendez SQLiteOpenHelper, toute la magie se passe dans cette super classe, en particulier la firebase database est créée (ou vient d’être rouverte) lorsque vous appelez getReadableDatabase() ou getWritableDatabase() . Ces deux méthodes:

  • Définir la variable de SQLiteDatabase db (et contrôler la transmission de la db à vos méthodes de rappel)
  • Initialisez la db en appelant votre onCreate(db) ou en ouvrant la firebase database existante.
  • Vérifiez le numéro de version et appelez votre onUpgrade(db) ou onDowngrade(db) si nécessaire

Ils appellent également quelques autres méthodes de rappel, telles que onConfigure(db) , onOpen(db) , etc. (Pour en savoir plus sur ces méthodes.) Si cela peut vous aider, vous pouvez lire le code source vous-même pour comprendre la structure de comment et quand. tout cela arrive.

La méthode onCreate () n’est pas un constructeur pour cette classe. onCreate est appelé lors de la création de la firebase database.

Ici, PeopleDB étend SQLiteOpenHelper. Ce code provient d’une classe différente et onCreate est appelé lorsque getWritableDatabase () ou getReadableDatabase (), ou quelque chose de la sorte, est appelé.

  PeopleDB db = null; //onCreate NOT called here db=new PeopleDB(getContext()); db.getWritableDatabase(); //onCreate is called here! 

J’espère que cela pourra aider.

Voir que notre firebase database est créée dans le constructeur openhelper lui-même et non dans la méthode onCreate remplacée. Dans la méthode onCreate, nous lançons une requête pour créer une table dans la firebase database qui est créée dans le constructeur de open helper pour insérer les données ne créant pas la firebase database.

Une autre chose est que l’object SQLiteDatabase n’est pas instancié dans la classe SQLiteOpenHelper. Il est instancié dans la classe où vous souhaitez utiliser la firebase database pour effectuer des opérations de firebase database. Vous devez alors écrire une fonction comme celle-ci pour initialiser ou ouvrir votre firebase database afin de vous préparer à l’insertion.

 SQLiteDatabase database; YourOpenHelper yourOpenHelper=new YourOpenHelper(); //to creating database using openhelper and automatically call onCreate to make a table in that public void open() throws SQLException { database = profiloHelper.getWritableDatabase(); } 

Voici le code que vous devez écrire pour toute opération dans la firebase database comme une suppression d’insertion, il vous suffit de changer le paramètre QUERY.

 SQLiteStatement insert_stmt = null; try { insert_stmt = database.comstackStatement(YOUR_QUERY); insert_stmt.bindSsortingng(1, field1); insert_stmt.bindSsortingng(2, field2); insert_stmt.executeInsert(); } finally { if (insert_stmt != null) insert_stmt.close(); } 

Probablement dans getReadableDatabase() ou getWriteableDatabase() lorsqu’ils sont appelés pour la première fois


Vous créez une sous-classe implémentant onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) et éventuellement onOpen (SQLiteDatabase), et cette classe se charge d’ouvrir la firebase database si elle existe, de la créer sinon, et de la mettre à niveau si nécessaire. . (Site Web développeur Android)

La classe SQLiteOpenHelper s’appelle “Helper” pour une bonne raison. Cela nous évite des efforts considérables des auteurs d’applications.

La première fois que vous appelez getWritableDatabase (ou getReadableDatabase ) pour votre implémentation de SQLiteOpenHelper , votre super instruction dans votre constructeur transmet le Context actuel et le nom de firebase database que vous préférez au constructeur de superclasse pour SQLiteOpenHelper .

Le constructeur de la super-classe configure ensuite l’espace initial pour votre firebase database SQLiteDatabase et lui atsortingbue le nom que vous avez transmis via super .

Une fois l’opération terminée, le constructeur de la superclasse appelle onCreate et transmet la firebase database SQLiteDatabase nommée qu’il a créée via le paramètre unique de onCreate . Étant onCreate que onCreate n’est appelé qu’une seule fois, c’est un très bon endroit pour appeler execSQL afin de définir la structure de votre firebase database.

Les exécutions ultérieures de getReadableDatabase (ou getWritableDatabase ) ouvrent simplement la firebase database pour vous et n’appellent plus jamais onCreate . (Lorsque le constructeur de la superclasse note que super a envoyé un numéro de version différent, onUpgrade est onUpgrade .)

Comprendre la façon dont SQLiteOpenHelper crée une firebase database sans code évident et comment diable onCreate est passé à un argument “à l’ onCreate ” a été une véritable corvée pour moi. Maintenant, je ne peux pas croire que cela aurait pu être difficile.