我使用简单的sql lite查询从表中获取计数值。
Cursor cursor = db.rawQuery("SELECT sum(name2) FROM " + TABLE_NAME, null);
if (cursor.moveToFirst()) {
return cursor.getInt(0);
}
return cursor.getInt(0);
这很好用
但是当我向select查询添加where子句时
Cursor cursor = db.rawQuery("SELECT sum(name2) FROM " + TABLE_NAME + "WHERE name in (" + k + ")", null);
if(cursor.moveToFirst()) {
return cursor.getInt(0);
}
return cursor.getInt(0);
进程意外停止.......
答案 0 :(得分:4)
您错过了WHERE
:... + TABLE_NAME + "WHERE name ...
但你的代码有很多错误:
为什么在query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
之类的好方法可以避免构建具有SQL注入风险的查询字符串时使用rawQuery()
?甚至rawQuery()
将查询参数作为第二个参数。
你在哪里关闭Cursor
?你会以这种方式泄漏记忆。
如果cursor.moveToFirst()
返回false
并执行if
- 阻止后的行,会发生什么情况?这会崩溃。
答案 1 :(得分:0)
检查该k变量的值,它可能对sql IN运算符无效。