提问者:小点点

绿岛更新不起作用


我在我的项目中使用了GreenDao,它很好地将我的服务器模型映射到了android设备。一段时间以来,我一直在努力解决的问题是dao.update和/或dao.updateInTx方法没有更新数据库中的任何行。

我做什么:< br >

/**
 *  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()

有人知道我做错了什么吗?


共2个答案

匿名用户

请启用并检查

dao.queryBuilder().LOG_VALUES=true;
dao.queryBuilder().LOG_SQL=true;

并确保在更新时国家列表和国家列表详细信息具有相同的Primarykey

匿名用户

您的countyListDetail可能不包含Country对象,这些对象是使用greendao查询的。因此,对象对数据库“一无所知”,因为没有引用DaoSession。更新仅适用于已插入或从数据库中查询的对象。

如果countryList中的数据包含在countryListDetail的数据中,我会使用insertOrReplace

否则,您必须在插入或更新之前合并您的Country-对象。