SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Quando o SQLiteOpenHelper onCreate() / onUpgrade() é executado?


SQLiteOpenHelper onCreate() e onUpgrade() os retornos de chamada são invocados quando o banco de dados é realmente aberto, por exemplo, por uma chamada para getWritableDatabase() . O banco de dados não é aberto quando o próprio objeto auxiliar de banco de dados é criado.

SQLiteOpenHelper versões dos arquivos de banco de dados. O número da versão é o int argumento passado para o construtor. No arquivo de banco de dados, o número da versão é armazenado em PRAGMA user_version .

onCreate() só é executado quando o arquivo de banco de dados não existia e acabava de ser criado. Se onCreate() retorna com sucesso (não lança uma exceção), supõe-se que o banco de dados foi criado com o número da versão solicitada. Como implicação, você não deve capturar SQLException s em onCreate() você mesma.

onUpgrade() é chamado apenas quando o arquivo de banco de dados existe, mas o número da versão armazenada é menor que o solicitado no construtor. O onUpgrade() deve atualizar o esquema da tabela para a versão solicitada.

Ao alterar o esquema da tabela no código (onCreate() ), você deve certificar-se de que o banco de dados esteja atualizado. Duas abordagens principais:

  1. Exclua o arquivo de banco de dados antigo para que onCreate() é executado novamente. Isso geralmente é preferido no momento do desenvolvimento, onde você tem controle sobre as versões instaladas e a perda de dados não é um problema. Algumas maneiras de excluir o arquivo de banco de dados:

    • Desinstale o aplicativo. Use o gerenciador de aplicativos ou adb uninstall your.package.name da casca.

    • Limpar dados do aplicativo. Use o gerenciador de aplicativos.

  2. Incremente a versão do banco de dados para que onUpgrade() é invocado. Isso é um pouco mais complicado, pois é necessário mais código.

    • Para atualizações de esquema de tempo de desenvolvimento onde a perda de dados não é um problema, você pode simplesmente usar execSQL("DROP TABLE IF EXISTS <tablename>") para remover suas tabelas existentes e chamar onCreate() para recriar o banco de dados.

    • Para versões lançadas, você deve implementar a migração de dados em onUpgrade() para que seus usuários não percam seus dados.