2012-01-31 6 views
2

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

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-where.

+0

Что вы пытаетесь удалить? это правильный синтаксис db.delete (table, whereClause, whereArgs) – Lucifer

+0

да, синтаксис верен. но API не может распознать '?' отметьте в кавычках. он рассматривает «?» отметьте в моем коде как литерал '?' mark ... – davidshen84

+0

Вы пробовали код lalit? – Lucifer

ответ

1

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

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

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

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+"')"); 
0
julianday('now', '- ? days') 

должен то же, что и

julianday('now') - ? 
+0

Я думаю, мне повезло в этом случае. Но что, если я хочу julianday ('now', '-? Months')? – davidshen84