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.name
da 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.
-