我必须升级具有SQLite数据库的Android应用。在新版本中,我们决定使用INTEGER(自1970-01-01 00:00:00 UTC
以来的秒数)来存储java.util.Date
个对象而不是TEXT(ISO8601字符串:YYYY-MM-DD HH:MM:SS.SSS
)。
是否可以更改列类型?或者我应该添加一个新列,然后将日期对象转换为long,然后删除旧列,最后重命名新列?或者有更好/标准的方法吗?
答案 0 :(得分:0)
我会使用SQLiteOpenHelper#onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),正如您所说:
添加新列,然后将日期对象转换为long,然后删除 旧列并在最后重命名新列
另一方面,您可以将int放在具有TEXT从属关系的列中,因为sqlite并不真正关心大多数情况下的类型。
答案 1 :(得分:0)
这可能会对你有帮助......
CREATE TABLE IF NOT NOT EXISTS TEMP_TABLE (id整数主键自动增量, col2change整数不为空,...)
INSERT INTO TEMP_TABLE SELECT * FROM EXISTING_TABLE
DROP TABLE EXISTING_TABLE
ALTER TABLE TEMP_TABLE RENAME TO EXISTING_TABLE
答案 2 :(得分:0)
实际上,正如@delor所说,SQLite几乎没有字面,请参阅http://www.sqlite.org/datatypes.html
您只需一个查询即可更新表格:
update t set d = strftime('%s', d)