Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android createOrUpdate()始终使用ORMLite在数据库中创建新条目_Android_Ormlite - Fatal编程技术网

Android createOrUpdate()始终使用ORMLite在数据库中创建新条目

Android createOrUpdate()始终使用ORMLite在数据库中创建新条目,android,ormlite,Android,Ormlite,在我的Android项目中,ORMLite起着缓存的作用。我正在从web服务器下载数据并将其放入数据库。我正在对我的对象调用createOrUpdate,但数据库中出现了重复项。除了主键(它只是一个自动递增的整数)之外,数据库条目是相同的。我认为,由于我的第二个对象还没有主键,ORMLite认为这两个对象是不同的,即使其他字段都是相同的 有人知道这是不是真的吗?除非您的对象已经设置了id字段,否则不应该调用createOrUpdate。ORMLite确定数据库中是否存在它的方法是按id对其进行查

在我的Android项目中,ORMLite起着缓存的作用。我正在从web服务器下载数据并将其放入数据库。我正在对我的对象调用
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
,以获得更好的示例吗?