2015-05-02 43 views
3

我想從我的SQLite數據庫中刪除這樣的幾行:SQLiteException附近的「<」,同時刪除查詢

dbUtilsObj.delete(EngineUtiReport.TABLE_NAME, 
    EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN, 
    new String[] { String.valueOf(nDaysOldUnixTime) }); 

在上面的代碼nDayOldTimeInMills = 1429963811949DBUtils.IS_LESS_THAN = " < "

但我得到這個語法錯誤例外,我只是不能找出我做錯了:

android.database.sqlite.SQLiteException: near "<": syntax error (code 1): , 
while compiling: DELETE FROM engine_utilization_report WHERE unix_time < 
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113) 
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:686) 

回答

4

當使用參數化查詢時,您需要指定要將參數插入到查詢中的位置。你可以通過在參數應該去的地方添加一個?來做到這一點。現在看看在異常的查詢,並且變得很明顯的什麼是錯的:

DELETE FROM engine_utilization_report WHERE unix_time < 

通知的unix_time <末? ?丟失。正確的查詢應該是這樣的:

DELETE FROM engine_utilization_report WHERE unix_time < ? 

要修正此錯誤,你只需要在where子句這樣的結尾添加?

dbUtilsObj.delete(EngineUtiReport.TABLE_NAME, 
    EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN + "?", 
    new String[] { String.valueOf(nDaysOldUnixTime) }); 
2

你可以試試這個:

dbUtilsObj.delete(EngineUtiReport.TABLE_NAME, 
    EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN + "?", 
    new String[] { String.valueOf(nDaysOldUnixTime) }); 

你逝去的對於刪除查詢的參數,您需要指出該參數應該放在?的哪個位置。在你的情況下,在where子句的最後。