2016-02-11 41 views
0

我有一个问题。我的应用程序连接到WebService并下载有关啤酒厂的数据。这些数据保存到OrmliteDB。如何不重复记录到ormlite

我该怎么做才能让数据库不会重复相同的记录。

window.java你去

dbHelper = (DatabaseHelper) OpenHelperManager.getHelper(getApplication(), DatabaseHelper.class); 

final RuntimeExceptionDao studDao = dbHelper.getStudRuntimeExceptionDao(); 
BeerDataBaseTemplate wdt = new BeerDataBaseTemplate(); 

for (Datum i : breweries.getData()) { 
    if (i.getName() != null && i.getAbv() != null && i.getDescription() != null && i.getLabels() != null) { 
      studDao.createIfNotExists(new BeerDataBaseTemplate("" + i.getName(), i.getAbv(), i.getDescription(), i.getLabels().getMedium().toString(), i.getLabels().getLarge().toString(), false)); 
    } else if (i.getName() != null && i.getAbv() != null && i.getDescription() == null && i.getLabels() != null) { 
     studDao.createOrUpdate(new BeerDataBaseTemplate("" + i.getName(), i.getAbv(), "Brak danych", i.getLabels().getMedium().toString(), i.getLabels().getLarge().toString(), false)); 
    } else if (i.getName() != null && i.getAbv() != null && i.getDescription() == null && i.getLabels() == null) { 
     studDao.createOrUpdate(new BeerDataBaseTemplate("" + i.getName(), i.getAbv(), "Brak danych", "Brak zdjęcia", "Brak zdjęcia", false)); 
    } else if (i.getName() != null && i.getAbv() == null && i.getDescription() == null && i.getLabels() == null) { 
     studDao.createOrUpdate(new BeerDataBaseTemplate("" + i.getName(), "Brak danych", "Brak danych", "Brak zdjęcia", "Brak zdjęcia", false)); 
    } else if (i.getName() == null && i.getAbv() == null && i.getDescription() == null && i.getLabels() == null) { 
     studDao.createOrUpdate(new BeerDataBaseTemplate("Brak danych", "Brak danych", "Brak danych", "Brak zdjęcia", "Brak zdjęcia", false)); 
    } 
} 

回答

0

一件事做的是让所有的来电记录的ID变成了Collection,然后做一些事情,如:

GenericRawResults<String[]> results 
    = studDao.queryRaw("SELECT id FROM stud WHERE id IN ?", newIdCollection); 

然后你会知道哪些id是新的,哪些是重复的。然后,您可以更新(或忽略)dups并创建其ID不在您的表中的新ID。

一定要做批量更新,并创建一个批处理操作,运行速度会快很多。