有人可以解释我有什么区别insert
,insertOrReplace
和save
在GreenDao库吗?GreenDao插入,插入或替换,保存
据我所知,insert
只是插入和insertOrReplace
插入如果不存在或更新/替换,如果存在。
但它如何insertOrReplace
和save
不同?
感谢
有人可以解释我有什么区别insert
,insertOrReplace
和save
在GreenDao库吗?GreenDao插入,插入或替换,保存
据我所知,insert
只是插入和insertOrReplace
插入如果不存在或更新/替换,如果存在。
但它如何insertOrReplace
和save
不同?
感谢
insert()
将实体添加到表中,假设该实体具有该键不存在。如果存在,则应抛出异常
insertOrReplace()
如果Key不存在,则将实体添加到表中,替换Key是否存在。
save()将表中没有密钥的实体添加到表中,如果其上存在密钥和实体则更新。如果实体具有密钥并且不存在于表上,则它将不执行任何操作。
从Javadoc
为AbstractDao.java
"Save 'saves' an entity to the database: depending on the existence of the key
property, it will be inserted (key is null) or updated (key is not null).
This is similar to insertOrReplace, but may be more efficient, because if
a key is present, it does not have to query if that key already exists."
从查看的是save
方法的代码,它包含在haskey
方法的if
声明,以确定是否运行一个update
或insert
:
if (hasKey(entity)) {
update(entity);
} else {
insert(entity);
}
而insertOrReplace
执行实际的INSERT OR REPLACE
sql语句。
请帮我理解正在发生的事情。如果我有空表并使用'saveInTx'方法记录的非写入数据库。如果我使用'inserOrReplaceInTx',则写入记录。这有什么问题?难道我做错了什么? – hogar
如果不知道更多关于数据库“实体”的信息以及您想要保存的内容,很难说。你有没有尝试在'dao'上启用日志记录来查看调试输出? 。 'dao.queryBuilder()LOG_VALUES = TRUE;' 'dao.queryBuilder()LOG_SQL = TRUE;' –
实体是非常简单的,它有几个字段(ID,姓名)和列表的另一个对象实体。 另外我观察到,在一张表中,我使用'saveInTx'或'InsertOrReplaceInTx'来记录相同数据的多个记录。我已经使用 'QueryBuilder.LOG_SQL = true;QueryBuilder.LOG_VALUES = true;' – hogar
我得到了“java.lang.UnsupportedOperationException:不支持带有非null键的实体”**保存**,但不支持** insertOrReplace()** – htafoya
@htafoya https: //github.com/greenrobot/greenDAO/issues/534 –