我正在使用ActiveAndroid,一切正常,直到我将另一个ForeignKey添加到一个模型。
我有一个名为Song的模型,如:
namespace Timer
{
void start(Duration time, function<void()> task)
{
thread([time, task]() {
this_thread::sleep_for(time);
task();
}).detach();
}
}
另一个模特作者是:
@Column(name = "author_id")
private String mAuthorId;
@Column(name = "created")
private long mCreated;
@Column(name = "album")
private Album mAlbum;
一切都运行良好但后来我在作者的模型中添加了这个新字段: @Column(name =“last_song”) 私人歌曲mLastSong;
然后,由于我在作者的模型中添加了FK lastSong,在重新启动应用程序后我收到一个错误:E / CursorWindow:无法分配CursorWindow'/ data / data /package / database / app.db'尺寸2097152由于错误-12。我有大约7500首歌曲模型和约450位作者。可能会发生什么?我的代码有问题吗?
提前致谢!
答案 0 :(得分:0)
您需要让ActiveAndroid和您的应用更新架构:
https://github.com/pardom/ActiveAndroid/wiki/Schema-migrations
每当架构发生更改时,您需要通过Configuration或AA_DB_VERSION元数据增加数据库版本号。如果添加了新类,ActiveAndroid会自动将它们添加到数据库中。但是,如果要更改现有表中的某些内容(例如,添加或删除列),则使用名为.sql的sql脚本完成此操作,其中NewVersion是资产/迁移中的AA_DB_VERSION。
如果文件的文件名大于旧数据库版本且小于或等于新版本,ActiveAndroid将执行脚本。
假设您为Items表添加了一种列颜色。您现在需要将AA_DB_VERSION增加到2并提供脚本2.sql。
ALTER TABLE Items ADD COLUMN color INTEGER;