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:-
Exclua o arquivo de banco de dados antigo para queonCreate()é 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 ouadb uninstall your.package.nameda casca.
-
Limpar dados do aplicativo. Use o gerenciador de aplicativos.
-
-
Incremente a versão do banco de dados para queonUpgrade()é 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 usarexecSQL("DROP TABLE IF EXISTS <tablename>")para remover suas tabelas existentes e chamaronCreate()para recriar o banco de dados.
-
Para versões lançadas, você deve implementar a migração de dados emonUpgrade()para que seus usuários não percam seus dados.
-