Android/Room/Sqlite : 获取房间中每列的 Maximum/Minimum 值的列表

Android/Room/Sqlite : Get a list of Maximum/Minimum Value of each Column in Room

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

Demo Table

我想查询 table 以获取 table 中每一列的 minimum/maximum 值的列表。

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

Sample Values

我希望输出为

最大值:{“值 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 实现此目的的最佳方法是什么?

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

演示实体(table):-

@Entity
class Demo {
    @PrimaryKey
    Long id;
    Double value1;
    Double value2;
    Double value3;
    Double value4;

    Demo(){}

    Demo(Double value1, Double value2, Double value3, Double value4) {
        this.value1 = value1;
        this.value2 = value2;
        this.value3 = value3;
        this.value4 = value4;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Double getValue1() {
        return value1;
    }

    public void setValue1(Double value1) {
        this.value1 = value1;
    }

    public Double getValue2() {
        return value2;
    }

    public void setValue2(Double value2) {
        this.value2 = value2;
    }

    public Double getValue3() {
        return value3;
    }

    public void setValue3(Double value3) {
        this.value3 = value3;
    }

    public Double getValue4() {
        return value4;
    }

    public void setValue4(Double value4) {
        this.value4 = value4;
    }
}

DemoDao 道:-

@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();

}
  • 单独查询更容易,但可以将它们合并。

DemoDatabase摘要class

@Database(entities = {Demo.class},version = 1)
abstract class DemoDatabase extends RoomDatabase {
    abstract DemoDao getDemoDao();
}

最后调用 activity(注意为了方便和简洁,使用了主线程):-

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