我知道有很多與我類似的問題,但就我的情況而言,它們都沒有奏效!
我有 4 列的表,我已經@PrimaryKey(autoGenerate = true) private int id;為我的 ID 和 @index unique 其他 3 列設定了,像這樣:
@Entity(tableName = "Data" ,
indices = {@Index(value = {"name","data","label"}, unique = true)})
public class Data {
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
private String data;
private String label;
public Data(String name, String data, String label) {
this.name = name;
this.data = data;
this.label = label;
}
對于我的 Dao 我已經(onConflict = OnConflictStrategy.REPLACE)為我的 Insert 查詢設定了,應該說我已經測驗了OnConflictStrategy.IGNORE,它甚至沒有在 App inception 中顯示表格:
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Data data);
最后在我的MainActivity課堂上,我的字串資料是我的插入方法旁邊的二維陣列:
db = AppDatabase.getAppDatabase(this);
dataDao = db.getDataDao();
ArrayList<Data> dataList = new ArrayList<>();
try {
for (int i = 0; i < stringData.length;) {
data = new Data(stringData[i][0],stringData[i][1],stringData[i][2]);
dataDao.insert(data);
i ;
}
}catch (Exception e){
Log.e(TAG, "onCreate: ", e);
}
我已經多次測驗和除錯我的應用程式,唯一得到的是我忘記增加的版本號錯誤!在下圖中你可以看到我的 ID 被復制了,它從 687 開始!

我建議在修改錯誤的第 216 行(見下文)后卸載該應用程式并重試。我還建議使用OnConflictStrategy.IGNORE并使用:-
@Insert(onConflict = OnConflictStrategy.IGNORE)
long insertIgnore(Data data);
如果插入回傳的值為 -1,則由于 UNIQUE 約束,該行不會被插入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436591.html
