2011-03-15 91 views

回答

3

应该有更好的方法来做到这一点,但我最终做的是将我想要的每一行的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; 
    } 
0
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”将返回全部。

+0

我完全不理解,但我不认为它解决了我的问题。我不能使用列名,我需要根据列值进行代码计算,以确定哪些行将被选中。 – 333Matt 2011-03-17 12:14:22

4

也许工作简单地保留在光标的所有行,但随后使用自定义适配器隐藏在显示时不需要的行。例如,如果你扩展CursorAdapter,那么你可能有这样的事情在你的bindView实现:

View v = view.findViewById(R.id.my_list_entry); 
boolean keepThisRow = .......; // do my calculations 
v.setVisibility(keepThisRow ? View.VISIBLE : View.GONE); 
0

我需要做一些计算方法, 在SQLite的是不可能的WHERE 条款

我觉得这很难相信;我的经验是,SQL可以让你查询任何你需要的东西(除了SQLite的情况下的索引或递归查询)。如果您需要的功能不受支持,您可以使用sqlite_create_function()轻松添加它并将其用于您的应用程序。或者,也许SELECT子句的创造性使用可以做你正在寻找的东西。

你能解释一下这些不可能的计算是什么吗?


编辑:没关系,检查出this webpage揭示了sqlite_create_function()适配器是所有Android的SQLite的包装收涨。这很烦人。

+0

Hmpf,Postgres SQL可能已经足够,但绝对不是SQLite ......想想一些GeoQueries(这是对SQLite屁股的痛苦) – 2017-01-13 16:20:08