You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Java+Room数据库数值查询仅0生效问题求助

问题:Room数据库匹配数值文本时仅0有效,其他值无结果且解析崩溃

问题现象

  • 基于Java+Room构建数据库,除主键id外所有字段设为文本类型,其中aberration_correction字段存储带小数的数值文本
  • 用户输入如"-0.20"这类数值提交后,无法匹配到对应记录;仅输入0时能正常返回结果
  • 尝试将aberration_correction改为Double类型后,完全无法获取任何结果
  • 执行数值解析代码时,仅0能正常运算,其他数值直接触发崩溃:
Double aberration_correctiondou = Double.parseDouble(mPersonList.get(i).getAberration_correction());
Double aberration_correctiondou2 = aberration_correctiondou + 1;
myViewHolder.aberration_correction.setText(String.valueOf(aberration_correctiondou2));

相关代码片段

Algorithm.java

public void cnvalgorithm (View view) {
    EditText sphecornea = findViewById(R.id.sphecornea);
    String sphecorneastr = sphecornea.getText().toString();
    AppExecutors.getInstance().diskIO().execute(() -> {
        final List<Person> persons = mDb.personDao().loadPersonByAbe(sphecorneastr);
        runOnUiThread(() -> mAdapter.setTasks(persons));
    });
}

PersonDao

@Query("SELECT id,firm,model,aberration_correction FROM PERSON" + " WHERE aberration_correction = :sphecorneastr")
public List<Person> loadPersonByAbe(String sphecorneastr);

Person Entity(简化版)

@Entity(tableName = "person")
public class Person {
    @PrimaryKey(autoGenerate = true)
    int id;
    public String firm;
    public String model;
    public String aberration_correction;
    
    @Ignore
    public Person(String firm, String model, String aberration_correction) {
        this.firm = firm;
        this.model = model;
        this.aberration_correction = aberration_correction;
    }

    public Person(int id, String firm, String model, String aberration_correction) {
        this.id = id;
        this.firm = firm;
        this.model = model;
        this.aberration_correction = aberration_correction;
    }

    public Person() {}

    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getFirm() { return firm; }
    public void setFirm(String firm) { this.firm = firm; }
    public String getModel() { return model; }
    public void setModel(String model) { this.model = model; }
    public String getAberration_correction() { return aberration_correction; }
    public void setAberration_correction(String aberration_correction) { this.aberration_correction = aberration_correction; }
}

解决方案

将数据库中aberration_correction列的小数分隔符从逗号改为点即可解决所有问题:

  • 文本匹配时,输入的"-0.20"会和数据库中存储的同格式字符串完全匹配
  • Double.parseDouble()可以正常解析使用点作为分隔符的数值文本,避免解析崩溃

内容的提问来源于stack exchange,提问作者Alex T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:25:16