Android/Room/Sqlite:获取Room中每个列的最大值/最小值列表

Android/Room/Sqlite:获取Room中每个列的最大值/最小值列表,android,android-sqlite,android-room,Android,Android Sqlite,Android Room,我的android应用程序中有一个表,看起来与下面给出的表相似 我希望查询该表以获得表中每列的最小值/最大值列表 例如,对于给定的样本值: 我希望输出是 最大值:{“值1”:76.1,“值2”:1000.0,“值3”:4897.847,“值4”:99.0} 最小值:{“值1”:2.3,“值2”:0.0,“值3”:9.1,“值4”:99.0} 在Android中使用Room实现这一点的最佳方法是什么?以下是一个实现您想要的结果的示例 演示实体(表格):- DaoDao:- @Dao inter

我的android应用程序中有一个表,看起来与下面给出的表相似

我希望查询该表以获得表中每列的最小值/最大值列表

例如,对于给定的样本值:

我希望输出是

最大值:{“值1”:76.1,“值2”:1000.0,“值3”:4897.847,“值4”:99.0}

最小值:{“值1”:2.3,“值2”:0.0,“值3”:9.1,“值4”:99.0}


在Android中使用Room实现这一点的最佳方法是什么?

以下是一个实现您想要的结果的示例

演示实体(表格):-

DaoDao:-

@Dao
interface DemoDao {

    @Insert
    Long insertDemoRow(Demo demo);

    @Query("SELECT '{\"Value 1\":'||max(value1)||', \"Value 2\":'||max(value2)||', \"Value 3\":'||max(value3)||' \"Value 4\":'||max(value4) AS Maximum FROM demo")
    String getMaxvaluesFromDemo();
    @Query("SELECT '{\"Value 1\":'||min(value1)||', \"Value 2\":'||min(value2)||', \"Value 3\":'||min(value3)||' \"Value 4\":'||min(value4) AS Minimum FROM demo")
    String getMinvaluesFromDemo();

}
  • 有单独的查询更容易,但它们可以组合在一起
数据库抽象类

@Database(entities = {Demo.class},version = 1)
abstract class DemoDatabase extends RoomDatabase {
    abstract DemoDao getDemoDao();
}
最后是一个调用活动(注意,为了方便和简洁,使用了主线程):-

运行时(仅设计为运行一次),日志中的结果为:-

D/DEMOINFO: Maximum {"Value 1":76.1, "Value 2":1000.0, "Value 3":4897.847 "Value 4":99.0
D/DEMOIBFO: Minimums{"Value 1":2.3, "Value 2":0.0, "Value 3":9.1 "Value 4":99.0

非常感谢您的解决方案。我只是想知道是否有一种方法可以将其扩展到一个有很多列的类,而不必提及查询字符串中的所有列名。@AayushMohanSinha可能可以通过使用函数从给定的列列表生成SQL,然后rawQuery可以使用这些列。可能有更好的设计/模式适合。非常感谢。我认为RawQuery和SimpleSQLiteQuery将为我完成这项工作。我会接受这个答案。
public class MainActivity extends AppCompatActivity {

    DemoDatabase db;
    DemoDao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db = Room.databaseBuilder(this,DemoDatabase.class,"demo.db")
                .allowMainThreadQueries()
                .build();
        dao = db.getDemoDao();
        dao.insertDemoRow(new Demo(76.1,null,4897.847,null));
        dao.insertDemoRow(new Demo(44.2,87.1,47.0,null));
        dao.insertDemoRow(new Demo(null,1000.0,12.345,null));
        dao.insertDemoRow(new Demo(2.3,0.0,9.1,99.0));

        Log.d("DEMOINFO","Maximum " + dao.getMaxvaluesFromDemo());
        Log.d("DEMOIBFO","Minimums " + dao.getMinvaluesFromDemo());
    }
}
D/DEMOINFO: Maximum {"Value 1":76.1, "Value 2":1000.0, "Value 3":4897.847 "Value 4":99.0
D/DEMOIBFO: Minimums{"Value 1":2.3, "Value 2":0.0, "Value 3":9.1 "Value 4":99.0