繁体   English   中英

Android机房SELECT * WHERE返回所有记录

[英]Android room SELECT * WHERE returns all records

我已经完成了Android Room数据库的设置,并遵循了一些教程,以尝试扩展所做的工作。 我得到了一些查询,但是当我尝试使用SELECT * WHERE查询时,它返回表中的所有记录,而不仅仅是具有期望ID的记录。

DAO中的查询

@Query("SELECT * FROM weapon_table WHERE fighter_id = :fighter_id" )
LiveData<List<Weapon>> getFighterWeapons(long fighter_id);

记录对象

@Entity(tableName = "weapon_table",
        foreignKeys = {
                @ForeignKey(entity = com.Database.Fighter.class,
                        parentColumns = "fighter_id",
                        childColumns = "fighter_id"),
        })
public class Weapon
{
    @NonNull
    String weapon_name;
    @NonNull
    @PrimaryKey(autoGenerate = true)
    long weapon_id;
    @NonNull
    long fighter_id;


    public Weapon(String weapon_name, long fighter_id)
    {
        this.weapon_name = weapon_name;
        this.fighter_id = fighter_id;
    }

    public long getWeapon_id()
    {
        return weapon_id;
    }

    public void setWeapon_id(long weapon_id)
    {
        this.weapon_id = weapon_id;
    }

    public String getWeapon_name()
    {
        return weapon_name;
    }

    public void setWeapon_name(String weapon_name)
    {
        this.weapon_name = weapon_name;
    }

    public long getFighter_id()
    {
        return fighter_id;
    }

    public void setFighter_id(long fighter_id)
    {
        this.fighter_id = fighter_id;
    }
}

当我调用以下代码时,所有记录都会打印到调试控制台,但是当前ID也会被打印出来,并且在所有情况下都保持不变。

   public void onClickAddWeapon(View view)
{
    List<Weapon> weapons = mWeaponViewModel.getFighterWeapons(fighter.getFighter_id()).getValue();
    for(Weapon weapon: weapons )
    {
        Log.d("WEAPONDEBUG", "WEAPONNAME/ID: " +weapon.getWeapon_name() +'/'+ weapon.getFighter_id() );
        Log.d("WEAPONDEBUG", "FIGHTERID: "+ fighter.getFighter_id() );

    }
}

修复非常简单,我遵循了此google代码实验室教程 ,当我尝试对其进行扩展时,我忘记了将查询结果实际分配给存储库文件中包含的列表。 感谢您的建议,他们使我朝着正确的方向前进。

  LiveData<List<Weapon>> getFighterWeapons(long fighter_id)
    {
        mWeaponDao.getFighterWeapons(fighter_id);
        return mAllWeapons;
    }

替换为

LiveData<List<Weapon>> getFighterWeapons(long fighter_id)
{
    mAllWeapons = mWeaponDao.getFighterWeapons(fighter_id);
    return mAllWeapons;
}

您的代码应该可以正常工作,但是我认为问题是使用外键定义的。 `

parentColumns = "fighter_id",

childColumns = "fighter_id"

您可以删除它并尝试吗?

                    `

尝试这个

@Query("SELECT * FROM weapon_table WHERE fighter_id IN (:fighter_id)" )
LiveData<List<Weapon>> getFighterWeapons(long fighter_id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM