我正在创建一个应用程序作为学习工具,但在连接查询方面遇到了困难。
我有一个包含两个表的数据库——马和封面——声明如下;
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);";
“类型”字段指的是种马、母马、阉割等,并且是从微调器中选择的(从 XML 字符串数组中填充)。
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);";
种马名称实际上存储为马表中马的 _id 字段。它是从仅显示马匹表中类型定义为“种马”的马匹的微调器中选择的。(同样适用于马雷)。
我有一个类“DatabaseHelper”来创建和升级表,每个表都有自己的适配器类“horsesDbAdapter”和“coversDbAdapter”,其中包含添加、编辑和删除条目以及相关查询的方法。(fetchAllHorse(), 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);
}
(全部改编自Android记事本示例)
我在列表视图中显示了封面表的内容(只显示了stallionName 和mareName)。但是由于这些字段只包含对 horses 表的唯一引用,所以显示的只是相当无信息的 _id 字段。
我的问题是;如何获取马匹的相关名称以显示在 listView 中?我已经阅读了连接查询等,但是当我尝试实现它们时迷路了。我假设我必须加入 horses._id 和 Covers.stallionName (然后为 MareName 制作一个几乎相同的),但我找不到如何执行此操作的具体示例。
如果需要任何其他信息/代码,请告诉我。
任何帮助将不胜感激,在此先感谢您。
编辑:我在 horses 表中创建了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));";