2017-02-23 125 views
2

有人可以解释我有什么区别insert,insertOrReplacesaveGreenDao库吗?GreenDao插入,插入或替换,保存

据我所知,insert只是插入和insertOrReplace插入如果不存在或更新/替换,如果存在。

但它如何insertOrReplacesave不同?

感谢

回答

5
  • insert() 将实体添加到表中,假设该实体具有该键不存在。如果存在,则应抛出异常

  • insertOrReplace()如果Key不存在,则将实体添加到表中,替换Key是否存在。

  • save()将表中没有密钥的实体添加到表中,如果其上存在密钥和实体则更新。如果实体具有密钥并且不存在于表上,则它将不执行任何操作。

+0

我得到了“java.lang.UnsupportedOperationException:不支持带有非null键的实体”**保存**,但不支持** insertOrReplace()** – htafoya

+0

@htafoya https: //github.com/greenrobot/greenDAO/issues/534 –

0

JavadocAbstractDao.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声明,以确定是否运行一个updateinsert

if (hasKey(entity)) { 
    update(entity); 
} else { 
    insert(entity); 
} 

insertOrReplace执行实际的INSERT OR REPLACE sql语句。

+0

请帮我理解正在发生的事情。如果我有空表并使用'saveInTx'方法记录的非写入数据库。如果我使用'inserOrReplaceInTx',则写入记录。这有什么问题?难道我做错了什么? – hogar

+0

如果不知道更多关于数据库“实体”的信息以及您想要保存的内容,很难说。你有没有尝试在'dao'上启用日志记录来查看调试输出? 。 'dao.queryBuilder()LOG_VALUES = TRUE;' 'dao.queryBuilder()LOG_SQL = TRUE;' –

+0

实体是非常简单的,它有几个字段(ID,姓名)和列表的另一个对象实体。 另外我观察到,在一张表中,我使用'saveInTx'或'InsertOrReplaceInTx'来记录相同数据的多个记录。我已经使用 'QueryBuilder.LOG_SQL = true;QueryBuilder.LOG_VALUES = true;' – hogar