我查询并获取了一个结果集,但我需要在SQLite WHERE子句中进行一些不可能的计算,以确定在ListView中显示的内容。我如何从光标中移除某些行?我知道这是与Filter rows from Cursor so they don't show up in ListView相同的问题,但该答案无济于事。如果没有更简单的方法可以提供示例吗?从Android SQLite光标中删除行
回答
应该有更好的方法来做到这一点,但我最终做的是将我想要的每一行的ID存储在一个字符串ArrayList中,然后重新查询_id IN arraListOfIds.toString(),替换方括号用括号来适应SQL语法。
// Get all of the rows from the database
mTasksCursor = mDbHelper.fetchAllTasks();
ArrayList<String> activeTaskIDs = new ArrayList<String>();
// calculate which ones belong
// .....
if (!hasCompleted)
activeTaskIDs.add(mTasksCursor.getString(TaskerDBadapter.INDEX_ID));
// requery on my list of IDs
mTasksCursor = mDbHelper.fetchActiveTasks(activeTaskIDs);
public Cursor fetchActiveTasks(ArrayList<String> activeTaskIDs)
{
String inClause = activeTaskIDs.toString();
inClause = inClause.replace('[', '(');
inClause = inClause.replace(']', ')');
Cursor mCursor = mDb.query(true, DATABASE_TABLE, columnStringArray(),
KEY_ROWID + " IN " + inClause,
null, null, null, null, null);
if (mCursor != null) { mCursor.moveToFirst(); }
return mCursor;
}
ContentResolver cr = getContentResolver();
Cursor groupCur = cr.query(
Groups.CONTENT_URI, // what table/content
new String [] {Groups._ID, Groups.NAME}, // what columns
"Groups.NAME NOT LIKE + 'System Group:%'", // where clause(s)
null, // ???
Groups.NAME + " ASC" // sort order
);
上面的“哪些列”部分是您可以告诉游标要返回哪些行的位置。使用“null”将返回全部。
也许工作简单地保留在光标的所有行,但随后使用自定义适配器隐藏在显示时不需要的行。例如,如果你扩展CursorAdapter
,那么你可能有这样的事情在你的bindView
实现:
View v = view.findViewById(R.id.my_list_entry);
boolean keepThisRow = .......; // do my calculations
v.setVisibility(keepThisRow ? View.VISIBLE : View.GONE);
我需要做一些计算方法, 在SQLite的是不可能的WHERE 条款
我觉得这很难相信;我的经验是,SQL可以让你查询任何你需要的东西(除了SQLite的情况下的索引或递归查询)。如果您需要的功能不受支持,您可以使用sqlite_create_function()轻松添加它并将其用于您的应用程序。或者,也许SELECT子句的创造性使用可以做你正在寻找的东西。
你能解释一下这些不可能的计算是什么吗?
编辑:没关系,检查出this webpage揭示了sqlite_create_function()适配器是所有Android的SQLite的包装收涨。这很烦人。
Hmpf,Postgres SQL可能已经足够,但绝对不是SQLite ......想想一些GeoQueries(这是对SQLite屁股的痛苦) – 2017-01-13 16:20:08
- 1. Android用光标删除行
- 2. 它是安全从Android的SQLite数据库中删除行,而迭代光标
- 3. 从sqlite中删除值android
- 4. 从android sqlite表中删除
- 5. 从Android中的光标获取值SQLite
- 6. Android SQLite从行号选择和删除
- 7. sqlite光标行为
- 8. 在Android SQLite删除行
- 9. 在android中用SQLite从SQLite删除行listadapter
- 10. 从Android中的SQLite中删除
- 11. 从SQLite中删除
- 12. android,在sqlite中删除多行
- 13. 在android sqlite表中删除一行
- 14. 的Android的SQLite中删除一行
- 15. 从sqlite数据库中删除 - Android
- 16. android sqlite数据库光标
- 17. sqlite android查询(光标)
- 18. 的Android的SQLite与光标
- 19. Android SQLite光标错误
- 20. android的sqlite的光标
- 21. 如何从android中的sqlite数据库中删除html标签?
- 22. 如何删除光标(Android SDK)中的重复行?
- 23. 在Android中删除sqlite db
- 24. Android的SQLite删除
- 25. 在Android SQLite数据库中删除第一项后光标大小为零
- 26. SQLite从选择结果中删除行
- 27. 从sqlite表中删除一行
- 28. 如何从Android中的SQLite表中删除一行
- 29. 如何在列表视图中从sqlite中删除行Android
- 30. 从SQLite中的数据库中删除一行Android
我完全不理解,但我不认为它解决了我的问题。我不能使用列名,我需要根据列值进行代码计算,以确定哪些行将被选中。 – 333Matt 2011-03-17 12:14:22