删除查询时“<”附近的 SQLiteException
SQLiteException near "<" while delete query
我正在尝试从我的 SQLite 数据库中删除几行,如下所示:
dbUtilsObj.delete(EngineUtiReport.TABLE_NAME,
EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN,
new String[] { String.valueOf(nDaysOldUnixTime) });
在上面的代码中nDayOldTimeInMills = 1429963811949
和DBUtils.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)
你可以试试这个:
dbUtilsObj.delete(EngineUtiReport.TABLE_NAME,
EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN + "?",
new String[] { String.valueOf(nDaysOldUnixTime) });
当您将参数传递给删除查询时,您需要使用 ?
指示该参数应该放置的位置。在你的情况下,它位于 where 子句的最后。
使用参数化查询时,您需要指定要将参数插入到查询中的位置。您可以通过在参数应该去的地方添加一个 ?
来做到这一点。现在查看异常中的查询,很明显出了什么问题:
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) });
我正在尝试从我的 SQLite 数据库中删除几行,如下所示:
dbUtilsObj.delete(EngineUtiReport.TABLE_NAME,
EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN,
new String[] { String.valueOf(nDaysOldUnixTime) });
在上面的代码中nDayOldTimeInMills = 1429963811949
和DBUtils.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)
你可以试试这个:
dbUtilsObj.delete(EngineUtiReport.TABLE_NAME,
EngineUtiReport.Columns.KEY_ENGINE_UTI_UNIX_TIME + DBUtils.IS_LESS_THAN + "?",
new String[] { String.valueOf(nDaysOldUnixTime) });
当您将参数传递给删除查询时,您需要使用 ?
指示该参数应该放置的位置。在你的情况下,它位于 where 子句的最后。
使用参数化查询时,您需要指定要将参数插入到查询中的位置。您可以通过在参数应该去的地方添加一个 ?
来做到这一点。现在查看异常中的查询,很明显出了什么问题:
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) });