Android/SQLiteでinsertWithOnConflict関数を使用して、データベースに既に存在する可能性のある値を挿入しています。値が存在する場合はAndroidのドキュメントによると、主キーが返されます。この機能を使用する場合、行がすでに存在する場合AndroidのinsertWithOnConflictが間違った値を返す
Returns
the row ID of the newly inserted row OR the primary key of the existing row if
the input param 'conflictAlgorithm' = CONFLICT_IGNORE OR -1 if any error
はしかし、既存の主キーが返されません。代わりに、主キーが自動インクリメントされ、返されるIDの行にデータが挿入されていない場合でも、その値が返されます。
関数呼び出し自体は比較的簡単です:
name_id = db.insertWithOnConflict("names", null, name_values, SQLiteDatabase.CONFLICT_IGNORE);