android - Android 中带有游标的表联合

标签 android sqlite cursor union

我正在尝试联合两个具有相同字段的表来创建一个游标(通过内容提供程序),我正在使用它来创建我的 ListView。

@Override
 public Cursor query(Uri uri, String[] projection, String selection,
   String[] selectionArgs, String sortOrder) {

  SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
  String groupBy = null;

  switch (sUriMatcher.match(uri)) {

  case LIST:
   StringBuilder sb = new StringBuilder();

   for (String s : projection)
    sb.append(s).append(",");

   String projectionStr = sb.toString();
   projectionStr = projectionStr.substring(0,
     projectionStr.length() - 1);

   String[] subQueries = new String[] {
     "SELECT " + projectionStr + " FROM " + Customer.TABLE_NAME,
     "SELECT " + projectionStr + " FROM "
       + IndividualCustomer.TABLE_NAME };
   String sql = qb.buildUnionQuery(subQueries, sortOrder, null);
   SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();
   Cursor mCursor = db.rawQuery(sql, null);

   mCursor.setNotificationUri(getContext().getContentResolver(), uri);

   return mCursor;

即使这两个表都是空的,我也会得到两个空行,这会在我的 ListView 中创建两行。我该如何摆脱这个问题?

此外,当我从 ListView 中删除一行时,尽管有 setNotificationUri(),但光标没有更新

任何指针,将不胜感激

最佳答案

已解决 - 我必须提供一个 group by 子句,因为(投影的)列之一具有“TOTAL(...)”函数。

关于android - Android 中带有游标的表联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949042/

相关文章:

ios - 当应用程序变为事件状态时,文件已加密或不是数据库消息

大数据库文件的 SQLite 磁盘 I/O 错误

sql - 引用匿名 block 中的游标

安卓java.lang.RuntimeException : Unable to start activity ComponentInfo

android - TextView 没有椭圆化

Android Studio 2.2更新: aligned APK (zipAlign) not generated using the new Gradle Plugin 2. 2.0

java - 光标没有移到第一个?

python - 使用 Python 和 mySQL(和 windows 作为操作系统),cursor.execute() 没有返回任何结果,但它正在连接

Android 12 启动画面图标不显示

android - 意外 token ':' .parse - React native Android