Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间数据库无法返回组\u concat列_Android_Sqlite_Android Sqlite_Android Room_Database View - Fatal编程技术网

Android 房间数据库无法返回组\u concat列

Android 房间数据库无法返回组\u concat列,android,sqlite,android-sqlite,android-room,database-view,Android,Sqlite,Android Sqlite,Android Room,Database View,我试图在房间中创建一个DatabaseView,以便从多个表中获取所需的数据。这是我的数据库视图: @DatabaseView("SELECT site.name AS address, group_site.name AS groupName, group_site.member_id AS memberId " + "FROM site, group_site " + "INNER JOIN groupsite_join_site " + "O

我试图在房间中创建一个DatabaseView,以便从多个表中获取所需的数据。这是我的数据库视图:

@DatabaseView("SELECT site.name AS address, group_site.name AS groupName, group_site.member_id AS memberId " +
        "FROM site, group_site " +
        "INNER JOIN groupsite_join_site " +
        "ON site.id = groupsite_join_site.site_id AND group_site.id = groupsite_join_site.group_site_id " +
        "UNION SELECT preloaded_site.name AS address, preloaded_group_site.name AS groupName, preloaded_group_site.memberId AS memberId " +
        "FROM preloaded_site, preloaded_group_site " +
        "INNER JOIN preloaded_groupsite_join_site ON preloaded_site.id = preloaded_groupsite_join_site.site_id AND preloaded_site.id = preloaded_groupsite_join_site.site_id"
)
public class SiteDetail {
    long memberId;
    String address;
    String groupName;
}
这是我的刀:

@Dao
public interface SiteDetailDao {

    @Query("SELECT address, group_concat(groupName, ', '), memberId FROM sitedetail WHERE memberId = :memberId OR memberId = -1 GROUP BY address LIMIT 10")
    LiveData<List<SiteDetail>> getSiteDetailForMember(long memberId);
}
为什么会发生这种情况?房间与小组联络有任何问题吗?这是SiteDetailDao_Impl:

  @Override
  public LiveData<List<SiteDetail>> getSiteDetailForMember(final long memberId) {
    final String _sql = "SELECT address, group_concat(groupName, ', '), memberId FROM sitedetail WHERE memberId = ? OR memberId = -1 GROUP BY address LIMIT 10";
    final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 1);
    int _argIndex = 1;
    _statement.bindLong(_argIndex, memberId);
    return __db.getInvalidationTracker().createLiveData(new String[]{"sitedetail"}, false, new Callable<List<SiteDetail>>() {
      @Override
      public List<SiteDetail> call() throws Exception {
        final Cursor _cursor = DBUtil.query(__db, _statement, false);
        try {
          final int _cursorIndexOfAddress = CursorUtil.getColumnIndexOrThrow(_cursor, "address");
          final int _cursorIndexOfMemberId = CursorUtil.getColumnIndexOrThrow(_cursor, "memberId");
          final List<SiteDetail> _result = new ArrayList<SiteDetail>(_cursor.getCount());
          while(_cursor.moveToNext()) {
            final SiteDetail _item;
            _item = new SiteDetail();
            final String _tmpAddress;
            _tmpAddress = _cursor.getString(_cursorIndexOfAddress);
            _item.setAddress(_tmpAddress);
            final long _tmpMemberId;
            _tmpMemberId = _cursor.getLong(_cursorIndexOfMemberId);
            _item.setMemberId(_tmpMemberId);
            _result.add(_item);
          }
          return _result;
        } finally {
          _cursor.close();
        }
      }

      @Override
      protected void finalize() {
        _statement.release();
      }
    });
  }
@覆盖
公共LiveData GetSiteDetailFormMember(最终长成员ID){
最后一个字符串_sql=“选择地址、组地址(groupName,,”)、memberId FROM sitedetail,其中memberId=?或memberId=-1按地址限制10分组”;
final-RoomSQLiteQuery _语句=RoomSQLiteQuery.acquire(_-sql,1);
int _argIndex=1;
_语句.bindLong(_argIndex,memberId);
返回_db.getInvalizationTracker().createLiveData(新字符串[]{“sitedetail”},false,新可调用(){
@凌驾
公共列表调用()引发异常{
final Cursor\u Cursor=DBUtil.query(\u db,\u语句,false);
试一试{
final int _cursorIndexOfAddress=CursorUtil.getColumnIndexOrThrow(_cursor,“address”);
final int _cursorIndexOfMemberId=CursorUtil.getColumnIndexOrThrow(_cursor,“memberId”);
最终列表_result=newarraylist(_cursor.getCount());
while(_cursor.moveToNext()){
最终站点详细信息_项;
_item=新站点详细信息();
最后一个字符串\u tmpAddress;
_tmpAddress=\u cursor.getString(\u cursorIndexOfAddress);
_项目.设置地址(_tmpAddress);
最终长成员;
_tmpMemberId=\u cursor.getLong(\u cursorIndexOfMemberId);
_item.setMemberId(_tmpMemberId);
_结果.添加(_项);
}
返回结果;
}最后{
_cursor.close();
}
}
@凌驾
受保护的void finalize(){
_声明.发布();
}
});
}

发布
sitedaildao\u Impl
表明,生成代码不是为了获取结果列
group\u concat(groupName,,')的值。
。我猜这是因为它没有简单的名字。因此,正如@sergiytikonov在其评论中所建议的,您需要为该专栏提供一个别名。比如:

group_concat(groupName, ', ') AS concatName
要支持新别名,请创建另一个类(根据需要命名):

并将查询更改为返回
LiveData

@Query(“从sitedetail中选择地址、组_concat(groupName,,”)作为concatName、memberId”+
“其中memberId=:memberId或memberId=-1按地址分组限制10”)
LiveData GetSiteDetailFormMember(长成员ID);

您是否查看了Room
SiteDetailDao\u Impl.java自动生成的内部信息?也许你会从那里的方法
getSiteDetailFormMember
实现中得到一些线索。用SiteDetailDao\u Impl更新了这个问题,其中没有groupName的标志。@sergiytikhonov在
DBUtil.query(\uu db,\u语句,false,null)的行中出现错误:应为3个参数,但找到4个。可能不是这样,但请尝试将
…group_concat(groupName,,')作为groupName,…
@sergiytikhonov谢谢。这个问题按照你的建议解决了。
group_concat(groupName, ', ') AS concatName
public class SiteInfo {
    long memberId;
    String address;
    String concatName;
}
@Query("SELECT address, group_concat(groupName, ', ') AS concatName, memberId FROM sitedetail'" +
    " WHERE memberId = :memberId OR memberId = -1 GROUP BY address LIMIT 10")
LiveData<List<SiteInfo>> getSiteDetailForMember(long memberId);