我必须升级具有 SQLite 数据库的 Android 应用程序。在新版本中,我们决定使用 INTEGER(从 开始的秒数)而不是 TEXT(ISO8601 字符串:)1970-01-01 00:00:00 UTC
来存储对象。java.util.Date
YYYY-MM-DD HH:MM:SS.SSS
是否可以更改列类型?或者我应该添加一个新列,然后将日期对象转换为 long,然后删除旧列并最后重命名新列?或者有没有更好/标准的方法来做到这一点?
我会使用SQLiteOpenHelper#onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),正如你所说:
添加一个新列,然后将日期对象转换为 long,然后删除旧列,最后重命名新列
另一方面,您可以将 int 放入具有 TEXT 隶属关系的列中,因为 sqlite 在大多数情况下并不真正关心类型。
可能这会帮助你...
CREATE TABLE IF 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
实际上,正如@delor 所说,SQLite 几乎是无类型的,请参阅http://www.sqlite.org/datatypes.html
您只需一个查询即可更新您的表:
update t set d = strftime('%s', d)