我在我的项目中使用了 GreenDao,它在将我的服务器模型映射到 android 设备方面做得很好。我一直在努力解决的是 dao.update 和/或 dao.updateInTx 方法没有更新数据库中的任何行。
我所做的:
/**
* The first approach -> All in one runnable
*
*/
// list definitions
ArrayList<Country> countryList;
ArrayList<Country> countryListDetail;
final DaoSession daoSession = daoMaster.newSession();
// execute everything in runnable
// in order to optimize insert time
daoSession.runInTx(new Runnable() {
@Override
public void run() {
CountryDao countryDao = new CaountryDao();
// delete all records first
countryDao.deleteAll();
// insert countries with less data
size = countryList.size();
for (int i=0; i < size; i++) {
countryDao.insert(countryList.get(i));
}
// update countries with more data
// ID's of the Objects in countryListDetail match those from
// the countryList, so the primary key mathces
size = countryListDetail.size();
for (int i=0; i < size; i++) {
countryDao.update(countryListDetail.get(i));
}
}
}
/**
* The second approach -> updateInTx()
*
*/
// list definitions
ArrayList<Country> countryList;
ArrayList<Country> countryListDetail;
// insert & update logic
final DaoSession daoSession = daoMaster.newSession();
CountryDao countryDao = new CaountryDao();
countryDao.insertInTx(countryList);
countryDao.updateInTx(countryListDetail);
在这两种情况下,当我从设备中提取数据库并检查它时,Country 表只有基本插入数据,但没有应该来自更新语句的详细数据。调试时,GreenDao 逻辑似乎执行了 updateInsideSynchronized() 方法,同时也调用了 stmt.execute()。
有谁知道我可能做错了什么?