在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来代替?
答案 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();
}