如何强制ORM lite生成正确的DELETE查询?

时间:2018-07-25 13:46:21

标签: android sql ormlite

在Android项目中使用orm lite时出现以下问题:

我有一些应从表中删除的行。始终是表的所有行。因此查询始终可以像:“从...删除所有...”

我要通过以下代码删除行:

Logger.getDataAccessLogger()
                    .info("clearLocationsPendingToSend...");
            final Dao<LocationDto, Integer> pendingLocationsDao = DBConnectionFactory
                    .getInstance(mCtx).getPendingLocationsDao();

            pendingLocationsDao.callBatchTasks(new Callable<Void>() {
                @Override
                public Void call() throws Exception {
                    pendingLocationsDao.delete(pendingLocationsDao
                            .queryForAll());
                    return null;
                }
            });

问题是这种方法正在生成这样的sql查询:

DELETE FROM `pendingLocations` WHERE `id` IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?.........

因此,当有很多行(例如5000行)时,我在sql中得到了太多参数的异常:

android.database.sqlite.SQLiteException: too many SQL variables (code 1): , while compiling: DELETE FROM `pendingLocations` WHERE `id` IN (?,?,?,.....

我应该如何更改代码以强制orm不使用此类查询?要全部使用DELETE来代替?

1 个答案:

答案 0 :(得分:0)

尝试使用此代码从DatabaseTable类为LocationDto的pendingLocations表中删除所有数据。

try {
       Dao<LocationDto, Integer> pendingLocationsDao = dbHelper.getPendingLocationsDao();
        DeleteBuilder<LocationDto, Integer> deleteBuilder = pendingLocationsDao .deleteBuilder();
        deleteBuilder.delete();
    } catch (SQLException e) {
        e.printStackTrace();
    }