Элегантный способ выполнения сложных необработанных запросов с использованием ContentProvider

Я использую ContentProvider , чтобы говорить с базой данных моего приложения, и я ' m столкнулся с небольшой проблемой.

У меня есть запрос, который немного сложнее. Это выглядит примерно так:

String sql =
    "select " +
    "  tblHistory._id _id, " +
    "  tblHistory.item item, " +
    "  tblHistory.updated_on updated_on, " +
    "  (select _id from tblList " +
        "where tblList.item = tblHistory.item) list_id, " +
    "  1 priority, " +
    "from " +
    "  tblHistory " +
    "where " +
    "  tblHistory.status <> 'STATE_DELETING' and " + selection + " " +
    "union " +
    "select " +
    "  tblSearch._id _id, " +
    "  tblSearch.item item, " +
    "  -1 updated_on, " +
    "  (select _id from tblList " +
        "where tblList.item = tblSearch.product_name) list_id, " +
    "  2 priority, " +
    "from " +
    "  tblSearch " +
    "where " +
    "  not exists (select * from tblHistory " +
        "where tblHistory.item = tblSearch.product_name) " +
    "order by " +
    "  priority, _id asc";

    c = mDb.rawQuery(sql, null);

Выбор:

String where = "tblHistory.user_id="
               + Integer.toString(intUserId)
               + " and tblHistory.item like '%"
               + strSearch + "%'";

Моя проблема - мои подзапросы. У меня есть ограничение, которое мне нужно добавить, но нет хорошего способа передать это ограничение по конвейеру в метод. Мне нужно использовать правильный user_id в подзапросах.

На данный момент, я думаю, у меня есть 2 варианта:

1) Разобрать подстроку user_id из выборки.

2 ) Используйте selectionArgs как хак, чтобы передать "user_id =" + Integer.toString (intUserId) методу.

Есть еще идеи?

Я должен отметить, что Я бы предпочел не делать ничего взломанного, я сделал свой ContentProvider частным, поскольку он предназначен только для использования моим приложением; так что, если понадобится, могу.

7
задан BartoszKP 6 October 2013 в 10:31
поделиться