有没有办法在房间数据库中运行嵌套查询

2024-04-01

我正在迁移我的旧Android项目达到新标准,我陷入了困境room database,无法找到如何执行这2个SQLite命令使用room database。我有两个查询以嵌套方式工作,因此要使用以下命令获得相同的结果room有没有可能。

    default public ArrayList getOfflineRoomsAndObjectsByParentIds(String parentId, String site_id, Context context) {

        databaseHandler = new DatabaseHandler(context);
        Cursor cr = null;
        ArrayList<Room> offlineRoomNamesList = new ArrayList<>();
        try {

           **sqLiteDatabase = databaseHandler.getReadableDatabase();
            String query = "SELECT * FROM " + Constants.TABLE_ROOM_NAMES
                    + " WHERE " + Constants.SITE_ID + " = '" + site_id + "' AND " + Constants.PARENT_ID + "='" + parentId + "'";**

            cr = sqLiteDatabase.rawQuery(query, null);
            if (cr.moveToFirst()) {

                do {

                    Room room = new Room();
                    **room.setId(cr.getString(cr.getColumnIndex(Constants.KEY_ROOM_ID)));
                    query = "SELECT * FROM " + Constants.TABLE_OFFLINE_ROOM_OBJECTS
                            + " WHERE " + Constants.KEY_ROOM_KEY + " = ?"
                            + " AND " + Constants.SITE_ID + " = ? ORDER BY " + Constants.KEY_OBJECT_NAME;**

                    Cursor cursor = sqLiteDatabase.rawQuery(query, new String[]{cr.getString(cr.getColumnIndex(Constants.KEY_ROOM_KEY)), site_id});
                    if (cursor.moveToFirst()) {
                        do {
                            RoomObject roomObject = new RoomObject();
                            roomObject.setRoomKey(cursor.getString(cursor.getColumnIndex(Constants.KEY_ROOM_KEY)));
                            roomObject.setId(cursor.getInt(cursor.getColumnIndex(Constants.KEY_ID)));
                            roomObject.setInstanceNumber(cursor.getInt(cursor.getColumnIndex(Constants.KEY_INSTANCE_NUMBER)));
                            roomObject.setObjectType(cursor.getString(cursor.getColumnIndex(Constants.KEY_OBJECT_TYPE)));


                            String mergeKey = AppSharedPreference.getString(AppSharedPreference.MERGE_KEY, "", context);
                            if (roomObject.getObjectName().contains(mergeKey) && !TextUtils.isEmpty(mergeKey)) {
                                room.addMergeableObjectsInList(roomObject);
                            } else {
                                room.addRoomObjectsInList(roomObject);
                            }


                        }
                        while (cursor.moveToNext());
                    }
                    if (room.getRoomObjectsList().size() > 0)
                        offlineRoomNamesList.add(room);
                    cursor.close();
                } while (cr.moveToNext());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cr.close();
                sqLiteDatabase.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return offlineRoomNamesList;
    }

我现在看到的唯一可能性是两个定义两个不同的查询并以嵌套方式执行它们。

@Dao
public interface ControllerRoomObjectDao {



    @Query("SELECT * FROM room_names WHERE site_id=:siteId AND parentId=:parentId")
    Single<List<Room>>getOfflineRoomsAndObjectsByParentId(String siteId, String parentId);


    @Query("SELECT * FROM offline_objects WHERE site_id=:siteId AND parentId=:parentId")
    Single<List<RoomObject>>getOfflineObjectsByParentId(String siteId, String parentId);

}

您可以将databaseView用于您的用例 例如:

@DatabaseView("SELECT user.id, user.name, user.departmentId," +
        "department.name AS departmentName FROM user " +
        "INNER JOIN department ON user.departmentId = department.id")

public class UserDetail {
    public long id;
    public String name;
    public long departmentId;
    public String departmentName;
}

了解更多信息https://developer.android.com/training/data-storage/room/creating-views#java https://developer.android.com/training/data-storage/room/creating-views#java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在房间数据库中运行嵌套查询 的相关文章

  • 在S3客户端android中制作私有图像的ImageGallery

    我正在尝试在 Android 应用程序中创建 S3 Bucket 的 imageGallery 我的图像是私人的 所以我不会为每个图像提供任何特定的链接 对于此类私人图像 亚马逊有一个链接生成器 s3Client generatePresi
  • 在旧 Android 版本上使用 actionBarSherlock 的 searchView 的本机外观和感觉

    我注意到没有可行的解决方案显示如何使用操作栏在 listView 项目上使用过滤器 该解决方案适用于较旧的 Android 版本 如 2 3 x 我找到的唯一示例是片段示例的文件 LoaderCursorSupport java 但是 它仅
  • 进度条中形状的填充

    我正在使用 xml 文件来定义进度条 我在背景形状上定义了填充 但这个设置有时会正确显示 有时则不能 因此 如果我启动内部带有进度条的应用程序或活动 则会正确显示带有背景和 填充 进度的进度条 然后我关闭我的应用程序并再次启动它 并且 进度
  • 如何在android中将时间转换为“时间之前”

    我的服务器 返回时间 2016 01 24T16 00 00 000Z I want 1 转换为字符串 2 我希望它在从服务器加载时显示 不久前 请 帮我 我认为主要有三种方式 a 内置选项使用SimpleDateFormat and 日期
  • 无法从 https 下载 .apk

    我为我的客户开发了一个 Android 应用程序 我不想在 Play 商店上发布它 我已将其托管在我的客户端网站上 asp net 我已使用 MIME 类型 apk application vnd android package archi
  • 使用应用程序上下文滑动图像加载

    我在我的 Android 应用程序中使用 glide 进行图像加载 为了避免任何崩溃 我正在使用应用程序上下文加载图像 这对应用程序和内存的性能有何影响 这对应用程序和内存的性能有何影响 Glide提供了这么多 with 方法是有原因的 它
  • 调用了 BroadcastReceiver 但未调用 PhoneStateListener

    在调试下面的代码时 BroadcastReceiverCustom 正在被 已调用 但 PhoneStateListenerCustom 未调用 现在我只在 BroadcastReceiverCustom 中执行所需的操作 但可能不是最好的
  • 在 CustomAdapters 中使用条件 if(view==null)

    我正在为 ListView 编写一个自定义适配器 它扩展了 BaseAdapter 并在此方法中 Override public View getView int position View convertView ViewGroup pa
  • 将分页库从 3.0.0-alpha10 更新到 3.0.0-alpha12 时出现运行时错误

    我使用 paging 3 0 0 alpha10 创建了我的 pagingSource 类并且它有效 但是当我将版本更改为 3 0 0 alpha12 时 我收到这个错误 这是运行时异常 java lang AbstractMethodEr
  • android中viewpager中的多个视频播放器

    我想在 viewpager 中的不同片段上播放视频 我为每个片段使用多个媒体播放器和表面视图 当我向左或向右滑动时 我也想暂停和开始视频 滑动到下一个视频完全没有问题 但是当我滑动到上一个视频 已经在播放 时 表面视图重叠 同时 我可以毫无
  • 如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

    如何使用远程 URL 在 Android 模拟器中播放 mp4 视频 我使用了以下代码 但此代码给我错误 抱歉 该视频无法播放 07 05 16 58 19 525 INFO AwesomePlayer 34 mConnectingData
  • android,如何重命名文件?

    在我的应用程序中 我需要录制视频 在开始录制之前 我为其指定名称和目录 录制完成后 用户可以重命名其文件 我写了以下代码 但似乎不起作用 当用户输入文件名并单击按钮时 我将执行以下操作 private void setFileName St
  • VideoView中的seekTo

    我在寻找视频时遇到问题 我的应用程序应该从上次停止的位置恢复视频 所以我这样做 videoView seekTo bookmark videoView start 然而 当它播放时 我听到视频开头的声音大约 1 2 秒 只有在该视频寻找到正
  • 获取当前 GPS 时出现 NullPointerException

    我有一个测试屏幕 其中有一个按钮 按下它会调用该服务 我正在尝试实现一种方法来获取当前用户的当前 GPS 位置 但在尝试调用时它崩溃了 谁能告诉我问题是什么吗 package com example whereyouapp import j
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • 回购:找不到命令?

    我是 git 和 repo 的新手 我使用的是window 7 所以我使用cygwin 我已经从 cygwin 安装程序安装了 git 之后我尝试在 cygwin 中使用以下命令进行存储 repo init u git android gi
  • 使用本机短信编辑器发送短信后如何返回意图

    我正在使用下面的代码使用本机短信编辑器发送短信 Intent intent new Intent Intent ACTION VIEW intent putExtra address 1234567890 intent putExtra s
  • Android Studio 3.0 中的 Gradle 构建错误

    您能帮我解决 Android 3 0 中的 Gradle 构建问题吗 我是 Android Studio 的新手 以下是我在 AS 3 0 中的配置 gradle gt wrapper gt gradle wrapper propertie
  • 在 Android 应用程序中启动应用程序时仅显示一次版本信息

    我想显示一个带有 确定 按钮的简单信息对话框 介绍此版本中的新增内容 但它应该仅在第一次启动时显示 实施这个的最好方法是什么 我会 并且已经 使用带有布尔值或 int 值的 SharedPreferences 只需检查最后一个版本是否比当前
  • 只有创建视图层次结构的原始线程才能触摸其视图。在安卓上[重复]

    这个问题在这里已经有答案了 我只是一个初学者 所以请原谅我问一个可能愚蠢的问题 我不明白只有创建视图层次结构的原始线程才能触摸其视图的含义 请有人告诉我为什么会发生此错误以及如何解决此问题 ThankYou 这是我的班级 public cl

随机推荐

  • 如何锁定 Django 中的关键部分?

    我找不到一个好的干净方法来锁定 Django 中的关键部分 我可以使用锁或信号量 但 python 实现仅适用于线程 因此如果生产服务器分叉 那么这些将不会受到尊重 有谁知道一种方法 我现在正在考虑 posix 信号量 来保证跨进程的锁定
  • Docker Weave 和 WeaveDNS 问题

    我在本地计算机上运行的小型 weave 网络上设置 weaveDNS 时遇到问题 目前 问题表现为以下事实 当我运行 weave status 时 我在输出中没有看到 DNS 部分 如故障排除部分中所建议的那样 http docs weav
  • 如何正确使用倒计时线程,如何提前停止它?

    线程没有按我期望的方式工作 我有一个可行的解决方案 可以使用 Raspberry Pi 和簧片开关监控冰箱何时打开和关闭 声音播放未暂停和暂停 我现在想添加一个计时器 以便在门打开时间过长时执行某些操作 我认为启动一个在警报操作之前休眠 x
  • 排列 R 中向量的所有唯一枚举

    我试图找到一个函数来排列所有unique向量的排列 而不计算相同元素类型子集中的并置 例如 dat lt c 1 0 3 4 1 0 0 3 0 4 has factorial 10 gt 3628800 可能的排列 但仅10 2 2 4
  • R 中的“=”和“<-”有什么区别? [复制]

    这个问题在这里已经有答案了 我正在使用 R 2 8 1 并且可以同时使用 and lt 作为变量赋值运算符 他们之间有什么区别 我应该使用哪一个 From here http stat ethz ch R manual R patched
  • html 仅选择一组中的一个复选框

    那么如何才能只允许用户选择一个复选框呢 我知道单选按钮是 理想的 但就我的目的而言 它不是 我有一个字段 用户需要选择两个选项之一 但不能同时选择两个选项 问题是我需要我的用户也能够取消选择他们的选项 这就是单选按钮失败的地方 因为一旦选择
  • 使用.NET删除矩形?

    我可以删除我绘制的旧矩形并绘制新矩形吗 private void panel1 MouseClick object sender MouseEventArgs e Graphics g this panel1 CreateGraphics
  • 使用 Visual Studio 2008 远程调试 Web 应用程序的服务器端

    因此 我读到在我的测试服务器计算机上安装 VS2008 不是一个好主意 因为它对运行时环境的改变太大 我以前从未尝试过使用 Visual Studio 进行远程调试 那么对服务器端 Web 应用程序代码进行逐行远程调试的 最佳 方法是什么
  • Turbolinks 不工作 - 而是加载页面两次

    所以 在我的 Rails 4 应用程序中 我有 Turbolinks gem require jquery js require jquery turbolinks require turbolinks 然而 似乎有些不对劲 Turboli
  • 为什么我必须显式链接 libm? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么必须链接C 中的数学库 https stackoverflow com questions 1033898 why do you have to link the math library in
  • java进程停止整个进程树

    我正在使用 Java 运行时运行命令 包括某些 CVS 命令 I use process runtime exec cmd C cvs 在 Java 中运行 Process 的格式我需要有停止它的选择 为此 我使用 Java Process
  • 如何在模板中使用 request.META.get('HTTP_REFERER') ?

    我想用request META get HTTP REFERER 在模板内 我的模板来源 extends base html block title django bookmark login endblock block head log
  • 如何将 Google Apps 脚本 blob 转换为 base64 编码的字符串?

    我在 Google Apps 脚本中有一个 blob 如何将其转换为 Base64 编码的字符串以便将其写入其他 API FileReader 似乎不起作用 你可以试试这个 Utilities base64Encode blob getBy
  • 以编程方式执行 Segue 并将参数传递到目标视图

    在我的应用程序中 我有一个以编程方式执行转场的按钮 void myButtonMethod execute segue programmatically self performSegueWithIdentifier MySegue sen
  • 检查选项是否相等的便捷方法

    我正在寻找一种更方便的方法来证明可选值的相等性 这就是一个Oracle 博客文章 http www oracle com technetwork articles java java8 optional 2175753 html建议 Opt
  • 在 (n) 个字符后插入一个字符并重复 (n) 次 - vim

    我经常收到我们支持人员在 isc dhcp 上进行 dhcp 预订的票证 有些打印机 cof cof HP 在测试页上打印mac地址信息是这样的 002481F33A9C 显然 支持人员会以这种方式写入票证 我想更改为 00 24 81 F
  • 如何使用 buildbot 创建每日构建文件夹?

    我想保存每晚构建的副本 我认为将每个构建放入其自己的每日文件夹中是个好主意 但是 我无法使用 buildbot master cfg 中的时间 因为它是在配置时设置的 copy files release MyProgram exe ins
  • Android webview,加载assets文件夹中的javascript文件

    我已经看到这个问题已经被问了很多次 但仍然无法让我的代码正常工作 我想要我的webview加载一些 URL 比如 www google com 然后应用一些存储在assets jstest js 其中包含以下内容 function test
  • 在 LINQ 查询的选择部分中调用方法

    我有以下 linq 查询 var file from p in database tblFile join o in database tblFileVersion on p fldFileID equals o fldFileID joi
  • 有没有办法在房间数据库中运行嵌套查询

    我正在迁移我的旧Android项目达到新标准 我陷入了困境room database 无法找到如何执行这2个SQLite命令使用room database 我有两个查询以嵌套方式工作 因此要使用以下命令获得相同的结果room有没有可能 de