Android SQLite加入查询

Bru*_*ce0 3 sqlite android join

我正在创建一个应用程序作为学习工具,并且我很难加入查询.

我有一个带有两个表马和盖子的数据库,声明如下;

    private static final String HORSES_CREATE = "create table horses (_id integer primary key autoincrement, "
        + "name text not null, type integer not null, birthDate text not null, vaccineDate text not null, "
        + "inFoal integer not null, notes text not null);";
Run Code Online (Sandbox Code Playgroud)

'type'字段指的是种马,母马,阉割等,并从一个微调器(从XML String数组中填充)中选择.

private static final String COVERS_CREATE = "create table covers (_id integer primary key autoincrement, "
        + "stallionName integer not null, mareName integer not null, firstCoverDate text not null, lastCoverDate text not null, "
        + "scan14Date text not null, scan28Date text not null, foalingDate text not null, inFoal integer not null, notes text not null);";
Run Code Online (Sandbox Code Playgroud)

stallionName实际上存储为来自马桌的马的_id字段.它是从一个旋转器中选择的,该旋转器只显示马匹表中定义为"Stallion"的马匹.(同样适用于Mare).

我有一个类'DatabaseHelper'来创建和升级表,每个表都有自己的适配器类'horsesDbAdapter'和'coversDbAdapter',其中包含添加,编辑和删除条目的方法以及相关查询.(fetchAllHorses(),fetchHorse(long rowId))

例如:

    public Cursor fetchAllHorses() {

    return mDb.query(DATABASE_TABLE,
            new String[] { KEY_ROWID, KEY_NAME, KEY_TYPE, KEY_BIRTHDATE,
                    KEY_VACCINEDATE, KEY_INFOAL, KEY_NOTES }, null, null,
            null, null, null);
}
Run Code Online (Sandbox Code Playgroud)

(它全部改编自Android记事本示例)

我在listview中显示了cover表的内容(只显示了stallionName和mareName).但由于这些字段只包含对horse表的唯一引用,所以显示的是相当无信息的_id字段.

我的问题是; 如何获得要在listView中显示的马匹的相关名称?我已经读过加入查询等但是在我尝试实现它们时迷路了.我假设我必须加入horses._id和covers.stallionName(然后为MareName创建一个几乎完全相同的名称),但我找不到如何执行此操作的具体示例.

如果需要任何其他信息/代码,请与我们联系.

任何帮助将非常感谢,提前谢谢.

编辑:我已在马表中引用了stallionName和mareName外键引用(_id),但我仍然不确定如何以及在何处实现连接查询; 应该是在horsesDbAdapter,coverDbAdapter还是coverList类?(coversList是创建和填充listView的类)封面表声明现在读取;

    private static final String COVERS_CREATE = "create table covers (_id integer primary key autoincrement, "
        + "stallionName integer not null, mareName integer not null, firstCoverDate text not null, lastCoverDate text not null, "
        + "scan14Date text not null, scan28Date text not null, foalingDate text not null, inFoal integer not null, notes text not null," +
        "FOREIGN KEY (stallionName) REFERENCES horses (_id), FOREIGN KEY (mareName) REFERENCES horses (_id));";
Run Code Online (Sandbox Code Playgroud)

小智 9

我是Android和SQLLiteHelper的新手,并且想知道同样的事情.

阅读这篇文章后,我发现用表定义表之间连接的SQLLiteQueryBuilder.setTables方法是用方法完成的.请参阅此处参考

我从这个博客得到了这个

希望这有助于指导读者朝着正确的方向前进.