1

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

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

4

3 回答 3

0

我会使用SQLiteOpenHelper#onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),正如你所说:

添加一个新列,然后将日期对象转换为 long,然后删除旧列,最后重命名新列

另一方面,您可以将 int 放入具有 TEXT 隶属关系的列中,因为 sqlite 在大多数情况下并不真正关心类型。

于 2013-02-28T09:08:27.537 回答
0

可能这会帮助你...

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
于 2013-02-28T09:10:30.627 回答
0

实际上,正如@delor 所说,SQLite 几乎是无类型的,请参阅http://www.sqlite.org/datatypes.html 您只需一个查询即可更新您的表: update t set d = strftime('%s', d)

于 2013-02-28T09:16:06.203 回答