Eu tenho que atualizar um aplicativo Android que tenha um banco de dados SQLite. Na nova versão, decidimos usar INTEGER (o número de segundos desde 1970-01-01 00:00:00 UTC
) armazenar java.util.Date
objetos em vez de texto (seqüências de caracteres ISO8601: YYYY-MM-DD HH:MM:SS.SSS
).
É possível alterar o tipo de coluna? Ou devo adicionar uma nova coluna e, em seguida, converter objetos de data em longo e, em seguida, excluir a coluna antiga e no final renomear nova coluna? Ou existe uma maneira melhor / padrão de fazer isso?
Respostas:
0 para resposta № 1Pode ser que isso ajude você ...
CRIAR TABELA SE NÃO EXISTIR TEMP_TABLE (ID inteiro de autoincremento de chave primária, inteiro de col2change não nulo, ...)
INSERT INTO TEMP_TABLE SELECT * FROM EXISTING_TABLE
DROP TABLE EXISTING_TABLE
ALTER TABLE TEMP_TABLE RENAME TO EXISTING_TABLE
0 para resposta № 2
eu usaria SQLiteOpenHelper # onUpgrade (db SQLiteDatabase, int oldVersion, int newVersion) e como você disse:
adicionar uma nova coluna e, em seguida, converter objetos de data em longo e, em seguida, excluir a coluna antiga e no final renomear nova coluna
Por outro lado, você pode simplesmente colocar int na coluna com afiliação TEXT, já que o sqlite não se importa com tipos em a maioria dos casos.
0 para resposta № 3
Na verdade, como @delor disse SQLite é quase sem dinheiro, veja http://www.sqlite.org/datatypes.html
Você pode atualizar sua tabela por apenas uma consulta:
update t set d = strftime("%s", d)