Para adicionar ainda mais pontos ausentes aqui, conforme solicitação de Jaskey
A versão do banco de dados é armazenada no diretório SQLite
arquivo de banco de dados.
catch é o construtor
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Portanto, quando o construtor auxiliar do banco de dados é chamado com um name
(2º param), a plataforma verifica se o banco de dados existe ou não e se o banco de dados existe, ele obtém as informações da versão do cabeçalho do arquivo do banco de dados e aciona a chamada correta
Como já explicado na resposta antiga, se o banco de dados com o nome não existir, ele será acionado onCreate
.
A explicação abaixo explica o onUpgrade
caso com um exemplo.
Digamos, sua primeira versão do aplicativo teve a versão de DatabaseHelper
extensão do SQLiteOpenHelper
construtor (estendendo-se ) 1
e, em seguida, você forneceu um aplicativo atualizado com o novo código-fonte com a versão passada e 2
, automaticamente, quando a DatabaseHelper
plataforma é construída, é acionadaonUpgrade
ao ver o arquivo já existe, mas a versão é inferior à versão atual que você passou.
Agora diga que você está planejando fornecer uma terceira versão do aplicativo com a versão db como 3
(a versão db é aumentada apenas quando o esquema do banco de dados deve ser modificado). Nessas atualizações incrementais, você deve escrever a lógica de atualização de cada versão de forma incremental para obter um código melhor de manutenção
Exemplo de pseudo-código abaixo:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Observe a break
declaração ausente no caso 1
e 2
. É isso que quero dizer com atualização incremental.
Diga se a versão antiga é 2
e a nova é 4
, a lógica atualizará o banco de dados de 2
para 3
e depois para4
Se a versão antiga é 3
e nova versão é 4
, ela só vai executar a lógica de atualização para 3
a4