将列类型从TEXT更改为INTEGER以存储日期对象

时间:2013-02-28 09:00:36

标签: android sqlite

我必须升级具有SQLite数据库的Android应用。在新版本中,我们决定使用INTEGER(自1970-01-01 00:00:00 UTC以来的秒数)来存储java.util.Date个对象而不是TEXT(ISO8601字符串:YYYY-MM-DD HH:MM:SS.SSS)。

是否可以更改列类型?或者我应该添加一个新列,然后将日期对象转换为long,然后删除旧列,最后重命名新列?或者有更好/标准的方法吗?

3 个答案:

答案 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)