Как написать запрос в ormlite, когда условие генерируется с помощью цикла for - PullRequest
0 голосов
/ 30 сентября 2011

Я пишу запрос в ormlite, как показано ниже

Where<Advertisement, Integer> where = queryBuilder.where();
where.and(
    where.between("latitude", pLatitude - APPOXIMATION_FACTOR,
        pLatitude + APPOXIMATION_FACTOR),
    where.between("longitude", pLongitude - APPOXIMATION_FACTOR,
        pLongitude + APPOXIMATION_FACTOR)
      .and().between("width", pWidth - APPOXIMATION_FACTOR,
        pWidth + APPOXIMATION_FACTOR),
);

, а также еще один и с этим

for (int iterator = 0; iterator < moduleList.size(); iterator++) {
    where.eq("id", moduleList.get(iterator).getmId());
    if (iterator != advertisementList.size() - 1){
        whereForModuleID.or();
    }
}

, но я застрял, как написать запрос в этом случае

Ищу помощи

Ответы [ 2 ]

7 голосов
/ 30 сентября 2011

Во втором случае я бы использовал метод where.in (String, Iterable) .Вы должны сделать что-то вроде этого:

List<Integer> idList = new ArrayList<Integer>();
for (Module module : moduleList) {
    idList.add(module.getmId());
}
where.in("id", idList);

Это превращается в запрос SQL, например:

SELECT * `foo` WHERE `id` IN (7, 17, 1, 34)

Вот документы на where.in():

http://ormlite.com/docs/where-in

С точки зрения исходного вопроса, см. Этот ответ о where.and(int) и or(int) методах .

0 голосов
/ 03 сентября 2014

Чтобы создать запрос, который ищет учетную запись по имени и паролю, вы должны сделать следующее:

 QueryBuilder<Account, String> qb = accountDao.queryBuilder();
 Where where = qb.where();
 // the name field must be equal to "foo"
 where.eq(Account.NAME_FIELD_NAME, "foo");
 // and
 where.and();
 // the password field must be equal to "_secret"
 where.eq(Account.PASSWORD_FIELD_NAME, "_secret");
 PreparedQuery<Account, String> preparedQuery = qb.prepareQuery();

Это мой код, который я использую в своем проекте для получения PropertyModel из SQLite с использованием ORMLite

public ArrayList<PropertyPicModel> selectArgumentQueryPropertyModel(int property_id, Dao<PropertyPicModel, Integer> dao)
{
    try {
        QueryBuilder<PropertyPicModel, Integer> queryBuilder = dao.queryBuilder();
                Where<PropertyPicModel, Integer> where = queryBuilder.where();
                SelectArg selectArg = new SelectArg();
                // define our query as 'property_id = ?'

                where.eq(ORMLiteConfig.PROPERTY_ID, selectArg);
                // prepare it so it is ready for later query or iterator calls
                PreparedQuery<PropertyPicModel> preparedQuery = queryBuilder.prepare();
                selectArg.setValue(property_id);
                // later we can set the select argument and issue the query

                ArrayList<PropertyPicModel> picList = (ArrayList<PropertyPicModel>) dao.query(preparedQuery);
                return picList;
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        MyLog.e("Excep selectArgumentQuery " +e.toString());
    }
    catch (Exception e) {
        MyLog.e("Excep selectArgumentQuery " +e.toString());
    }
    return null;
}

В этом примере сгенерированный SQL-запрос будет примерно равен:

 SELECT * FROM account WHERE (name = 'foo' AND passwd = '_secret')

https://github.com/AshishPsaini/ormlite-examples/tree/master/android/HelloAndroid

http://ormlite.com/docs/in

...