Android createOrUpdate()始终使用ORMLite在数据库中创建新条目
在我的Android项目中,ORMLite起着缓存的作用。我正在从web服务器下载数据并将其放入数据库。我正在对我的对象调用Android createOrUpdate()始终使用ORMLite在数据库中创建新条目,android,ormlite,Android,Ormlite,在我的Android项目中,ORMLite起着缓存的作用。我正在从web服务器下载数据并将其放入数据库。我正在对我的对象调用createOrUpdate,但数据库中出现了重复项。除了主键(它只是一个自动递增的整数)之外,数据库条目是相同的。我认为,由于我的第二个对象还没有主键,ORMLite认为这两个对象是不同的,即使其他字段都是相同的 有人知道这是不是真的吗?除非您的对象已经设置了id字段,否则不应该调用createOrUpdate。ORMLite确定数据库中是否存在它的方法是按id对其进行查
createOrUpdate
,但数据库中出现了重复项。除了主键(它只是一个自动递增的整数)之外,数据库条目是相同的。我认为,由于我的第二个对象还没有主键,ORMLite认为这两个对象是不同的,即使其他字段都是相同的
有人知道这是不是真的吗?除非您的对象已经设置了id字段,否则不应该调用
createOrUpdate
。ORMLite
确定数据库中是否存在它的方法是按id对其进行查询。该守则规定:
ID id = extractId(data);
// assume we need to create it if there is no id <<<<<<<<<<<<<<<<<<<<<<<
if (id == null || !idExists(id)) {
int numRows = create(data);
return new CreateOrUpdateStatus(true, false, numRows);
} else {
int numRows = update(data);
return new CreateOrUpdateStatus(false, true, numRows);
}
ID=extractId(数据);
//假设我们需要在没有id的情况下创建它,您似乎需要手动提取已有条目的id,然后根据实际的唯一标识符更新数据库。具有唯一URL的示例:
CacheItem newEntry = fetchEntry("..."); // fetch it here
List<CacheItem> existing = mDao.queryForEq("url", newEntry.getUrl());
if (existing.size() > 0) {
int id = existing.get(0).getId();
newEntry.setId(id);
mDao.update(newEntry);
} else mDao.create(newEntry);
CacheItem newEntry=fetchEntry(“…”);//在这里取
List existing=mDao.queryForEq(“url”,newEntry.getUrl());
如果(现有的.size()>0){
int id=existing.get(0.getId();
newEntry.setId(id);
mDao.update(新条目);
}else mDao.create(newEntry);
设置主键,使其正常工作
@数据库字段(columnName=“id”,uniqueIndex=true)
私有int-id
为我工作。异常是在后台抛出的,但它是有效的:D太棒了!我开始怀疑这就是我的行为。谢谢你的解释。实际上我需要OP的行为+1来解释获取新插入所需的默认值:)!使用generatedId=true
数据库字段注释的列怎么样?而且它总是在数据库中创建一个新条目。看,把“”字段作为参数不是很好吗?因为用户可能会使用其他名称作为主键。。我面临着这个问题:)@Gray我无法理解这个主题,你能将我链接到如何简单地使用createOrUpdate
,以获得更好的示例吗?