3 Stimmen

oncreate wird nach dem Erstellen der Datenbank nicht aufgerufen !

Am Erstellen einer neuen Datenbank mit Helfer, aber wie pro das Dokument auf erstellen sollte aufgerufen werden, sobald die Datenbank erstellt wird, aber seine nicht richtig aufgerufen. könnte jeder plz mir helfen, dies so schnell wie möglich zu beheben. Plz sehen den Code unten.

1) Gibt es eine Möglichkeit, eine Datenbank zu erstellen, anstatt den Helper zu verwenden, wenn ja, dann bitte ich um Rat! 2) Welche Rückrufe werden bei der Datenbankerstellung und auch beim Beenden einer Datenbank aufgerufen?

OpenHelper(Context context) 
  {

     super(context, "examplee.db", null, 1 );
     SQLiteDatabase sqlite = null;       
      Log.w(TAG, "Openhelp database, ");
      sqlite =  context.openOrCreateDatabase("examplee.db", Context.MODE_PRIVATE, null );
      Log.e ( TAG,"SQ lite database object "+sqlite );                
  }

 public void onOpen(SQLiteDatabase db)
 {
     Log.e ( TAG,"On open called ");
 }

  @Override
  public void onCreate(SQLiteDatabase db) 
  {
      Log.w(TAG, " On create ");
      //db.execSQL(sql);
     //db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
  {
     Log.w(TAG, "Upgrading database, this will drop tables and recreate.");
     //db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
     //onCreate(db);
  }

}

Vielen Dank im Voraus,

5voto

SMBiggs Punkte 9875

Hier finden Sie eine sehr detaillierte Beschreibung, wie Sie eine Datenbankdatei aus Ihrem Emulator löschen können (das Debugging auf einem echten Android-Telefon ist sehr ähnlich).

  1. Starten Sie Ihren Emulator. Wenn Sie damit Probleme haben, können Sie den Rest dieser Hilfemeldung ignorieren!

  2. Rufen Sie eine Befehlszeilenschnittstelle auf, die Ihrem Betriebssystem entspricht.

  3. Führen Sie den Befehl aus: 'adb shell' (natürlich ohne die Anführungszeichen). Dadurch gelangen Sie in die Android Debug Bridge; die Eingabeaufforderung ändert sich in ein einfaches Pfund-Zeichen. Unabhängig von Ihrem ursprünglichen Betriebssystem befinden Sie sich nun in einem vereinfachten Unix-Betriebssystem.

  4. Sie befinden sich jetzt in Ihrem Emulator. Geben Sie den Befehl "ls -l" ein, um zu überprüfen, ob Sie sich im Root-Verzeichnis befinden (Sie werden etwas sehen, das einem Unix-Root-Verzeichnis-System sehr ähnlich sieht).

  5. Wechseln Sie in das Verzeichnis, in dem Ihre Datenbankdatei gespeichert ist. Angenommen, das Programm, das Sie ausgeführt haben, befindet sich im Paket com.sillynames.myprogram5, und die Datenbankdatei heißt "myblackbook.db". Sie finden die Datei in dem Verzeichnis:

    /data/data/com.sillynames.myprogram5/databases/myblackbook.db

  6. Sobald Sie in diesem Verzeichnis sind, löschen Sie einfach die Datenbank mit "rm myblackbook.db".

Ich hoffe, das hilft! -scott

2voto

Im Javadoc von SQLiteOpenHelper steht, dass onCreate "aufgerufen wird, wenn die Datenbank zum ersten Mal erstellt wird. Dies ist der Zeitpunkt, an dem die Erstellung von Tabellen und die anfängliche Belegung der Tabellen erfolgen sollte.". Es wird nicht jedes Mal aufgerufen, wenn die Anwendung gestartet wird. In Ihrem Fall ist die Datenbank wahrscheinlich bereits erstellt.

Um zu überprüfen, ob die Datenbank existiert, melden Sie sich mit adb in der Shell an und gehen Sie zu /data/data/<Name des Anwendungspakets>/databases und sehen Sie nach, ob die Datei employees.db dort existiert.

In der onCreate-Methode erstellen Sie normalerweise Ihre Tabellen und laden die ersten Daten. Dies wird ausgeführt, wenn die App zum ersten Mal nach der Installation gestartet wird.

0voto

Vikas Patidar Punkte 41943

Gibt es irgendeine Möglichkeit, eine Datenbank zu erstellen, anstatt den Helfer zu verwenden, wenn ja, dann bitte ich um Rat!

Ja, Sie können Ihre Datenbank manuell auf Ihrem System erstellen, indem Sie das Tool SQLite Manager oder andere und bündeln diese sqlite db Datei in Ihrer assets Ordner Ihres Projekts. Wenn Ihre Anwendung läuft, müssen Sie die Datenbankdatei in den folgenden Pfad kopieren /data/data/your_app_package_name/databases/

Siehe dies: Verwendung Ihrer eigenen SQLite-Datenbank in Android-Anwendungen

Welche Callbacks werden bei der Datenbankerstellung und auch bei der Beendigung einer Datenbank aufgerufen?

Wenn Ihre Datenbank zum ersten Mal erstellt wird, wird die onCreate() Methode aufgerufen wird. Und es gibt keine Möglichkeit, die kill/drop eine Datenbank zu erstellen, können Sie diese db-Datei löschen.

0voto

Michael Punkte 87

Vergewissern Sie sich, dass Sie die Datenbankreferenz erhalten. Prüfen Sie, ob Sie die Datenbankreferenz haben, die mein Problem war. Hatte Datenbank _db oben auf Klasse deklariert, aber in meinen Funktionen war es null

 final Database db = await initDb();
 print("insert to db $db");

initDB

Future<Database> initDb() async {
print("called db init");
try {
  final dbFolder = await getDatabasesPath();

  if (!await Directory(dbFolder).exists()) {
    print("db path does not exist");
    await Directory(dbFolder).create(recursive: true).then((value) {
      print("db directory $value");
    });
  }

  final dbPath = join(dbFolder, _kBdFileName);
  print("db path $dbPath");

  // open db
  _db = await openDatabase(
    dbPath,
    version: 1,
    onCreate: (db, version) async {
      print("Call on create");
      await _initDBtables(db).then((value) {
        print("on created ");
      });
    },
  );
  print("Db initialized $_db");
  // success init db
  return _db;
} on DatabaseException catch (e) {
  print(e);

  return _db;
}

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X