【问题标题】:SQLite Count where querySQLite Count where 查询
【发布时间】:2011-11-25 10:15:09
【问题描述】:

我使用一个简单的 sql lite 查询从表中获取计数值。

Cursor cursor = db.rawQuery("SELECT sum(name2) FROM " + TABLE_NAME, null);
if (cursor.moveToFirst()) {
   return cursor.getInt(0);
}
return cursor.getInt(0);

这很好用

但是当我在选择查询中添加 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);

进程意外停止.......

【问题讨论】:

  • 另外,请从logcat发布堆栈跟踪。

标签: android sqlite select count where-clause


【解决方案1】:

WHERE 前面缺少一个空格:... + TABLE_NAME + "WHERE name ...

但是你的代码有很多问题:

  • 当有像 query(table, columns, selection, selectionArgs, groupBy, having, orderBy) 这样的好方法可以让您避免构建查询字符串时冒 SQL 注入的风险时,为什么还要使用 rawQuery()?甚至rawQuery() 也将查询参数作为第二个参数。

  • 你在哪里关闭你的Cursor?这样你会泄漏内存。

  • 如果cursor.moveToFirst() 返回false 并且您执行if 块之后的行会发生什么?这会崩溃。

【讨论】:

    【解决方案2】:

    检查那个 k 变量的值,它可能对 sql IN 运算符无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      相关资源
      最近更新 更多