2012-01-31 50 views
2

我有一个表T1,其具有表示儒略日的浮子柱。现在我想删除julianday比n-day更早的条目。我想:如何在Android SQLite的where子句中包含参数?

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-clause中引用。

+0

你想要删除什么?这是正确的语法db.delete(table,whereClause,whereArgs) – Lucifer 2012-01-31 05:10:23

+0

是的,语法是正确的。但API无法识别'?'标记在引号中。它对待'?'在我的代码中标记为文字'?'标记... – davidshen84 2012-02-01 01:40:02

+0

你试过lalit的代码吗? – Lucifer 2012-02-01 01:44:56

回答

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 2012-01-31 09:37:30