2017-02-23 9 views
2

を保存誰かがGreenDaoライブラリのメソッドinsertinsertOrReplacesaveの違いは何である私に説明できますか?GreenDao、insertOrReplaceを挿入

私は、insertが挿入するだけで、存在しない場合、または更新/置換が存在する場合は、insertOrReplace挿入を理解します。

しかし、insertOrReplacesaveがどのように違うのですか? saveメソッドのコードを見てから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." 

ため

おかげ

答えて

5
  • insert()は、そのキーを持つエンティティが存在しないと仮定してテーブルにエンティティを追加します。存在する場合、例外がスローされます。

  • insertOrReplace()キーが存在しない場合はエンティティをテーブルに追加し、キーが存在する場合はキーを置き換えます。

  • save()テーブルにキーを持たないエンティティを追加し、テーブルにキーとエンティティが存在する場合は更新します。 EntityにKeyがあり、Tableに存在しない場合は何も行いません。

+0

** null **キーを持つエンティティではサポートされていません** insertOrReplace()** – htafoya

+0

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

0

Javadocからは、それがupdateまたはinsertを実行するかどうかを判断するためにhaskey方法にif文が含まれています。

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

insertOrReplaceは、実際のINSERT OR REPLACEのSQL文を実行します。

+0

何が起こっているのか理解してください。空のテーブルがあり、 'saveInTx'メソッドを使用すると、レコードのうちのどれもがDBに書き込まれません。 'inserOrReplaceInTx'を使用すると、レコードが書き込まれます。これには何が問題なのですか?私は何か間違っているのですか? – hogar

+0

DBの「エンティティ」と保存しようとしていることについての情報が分からないと言うことは難しいです。デバッグの出力を見るために 'dao 'のログを有効にしようとしましたか? 'dao.queryBuilder()LOG_VALUES =真;' 'dao.queryBuilder()LOG_SQL =真;' –

+0

エンティティが非常に簡単です、それはいくつかのフィールド(ID、名前)と別のオブジェクトのリストを持っていますエンティティ。 また、あるテーブルでは、saveInTxまたはInsertOrReplaceInTxを使用して同じデータの複数のレコードがあることがわかりました。 私はログを有効にするためにmenageしなかった、私は使用した 'QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; ' – hogar