首次实施GreenDAO
。一直在阅读很多其他问题,我觉得我已经完成了所有这些问题。
我的简单实体:
@Entity(
indexes = {
@Index(value = "searchTerm", unique = true)
}
)
public class SearchTerm
{
@Id private Long id;
// @Unique have also tried this
// @Index(unique = true) have also tried this
private String searchTerm;
private Date date;
}
然后我使用searchTermDao.insertOrReplace(searchTerm)
插入表格。问题是它将存储searchTerm
完全相同的多个条目。我做错了什么?
private SearchViewQueryTextEvent storeSearchTerm(SearchViewQueryTextEvent queryTextEvent)
{
SearchTerm searchTerm = new SearchTerm();
searchTerm.setSearchTerm(queryTextEvent.queryText().toString());
searchTerm.setDate(new Date());
searchTermDao.insertOrReplace(searchTerm);
Log.d(TAG, "Stored new search term: " + searchTerm.getSearchTerm());
return queryTextEvent;
}
SOLUTION:
感谢评论中的 Luiz ,我刚刚在初始化时升级了数据库:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "search-db");
helper.onUpgrade(helper.getWritableDatabase(), 1, 2);
Database db = helper.getWritableDb();
return new DaoMaster(db).newSession();
.onUpgrade()
只需要调用一次。
答案 0 :(得分:0)
我遇到了同样的问题,在查看日志后,我意识到在应用注释@Unique
后数据库没有更新。
要解决此问题,请尝试增加扩展SQLiteOpenHelper
的类中的数据库版本,并将表放在onUpgrade()
方法中。
private static final int VERSION = 2; //+ one number
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + table_name);
onCreate(db);
}