Как включить аргументы в предложении where в Android SQLite? - PullRequest
2 голосов
/ 31 января 2012

У меня есть таблица T1, в которой есть столбец с плавающей точкой, представляющий julianday.Теперь я хочу удалить записи, которые julianday старше, чем n-день.Я пытался:

db.delete(T1, COL_JULIANDAY + " <= julianday('now', '- ? days')",
  new String[] { Integer.toString(days) });

Но я получил сообщение об ошибке от Android:

 android.database.sqlite.SQLiteException: bind or column index out of range

Я думаю, это потому, что '?'знак цитируется в моем предложении where.

Ответы [ 3 ]

1 голос
/ 08 ноября 2012

Вместо того, чтобы прибегать к сырому SQL, я предлагаю попробовать использовать операторы конкатенации в предложении where.

db.delete(T1, COL_JULIANDAY + " <= julianday('now', '- ' || ? || ' days')",
    new String[] { Integer.toString(days) });
0 голосов
/ 31 января 2012
julianday('now', '- ? days')

должно совпадать с

julianday('now') - ?
0 голосов
/ 31 января 2012

Я еще не проверял это, но я думаю, что так и должно быть,

db.delete(T1, COL_JULIANDAY + " <= julianday(?)", new String[] 
                                                    { Integer.toString(days) });

Если вы предпочитаете, вы можете просто использовать SQL-запрос с db.execSQL(statement);

db.execSQL("delete from "+T1+" where COL_JULIANDAY <= julianday('"+days+"')");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...