我正在创建一个作为学习工具的应用程序,并且在连接查询方面遇到了困难。
我有两个表格的数据库 - horses和covers- 声明如下:
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);";
'type'字段指公马、母马、阉马等,并从一个微调器中进行选择(由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);";
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);
}
(这些内容都是从Android记事本示例中改编的)
我在ListView中显示了“封面表”中的内容(仅显示公马名称和母马名称)。但由于这些字段只包含对“马匹表”中唯一引用,因此显示的只是相当不具信息性的_id字段。
我的问题是:如何在ListView中获取要显示的马的相关名称?我已经阅读了联接查询等文档,但在尝试实现它们时迷失了。我假设我需要连接horses._id和covers.stallionName(然后再为MareName创建一个几乎相同的)但我找不到如何执行此操作的具体示例。
如果需要任何其他信息/代码,请告诉我。
非常感谢您提供的任何帮助。谢谢!
编辑:我已经将stallionName和mareName设置为引用“马匹表”中的(_id)外键,但仍不确定在哪里以及如何实现联接查询;应该放在horsesDbAdapter、coversDbAdapter或coversList类中?(coversList是创建和填充ListView的类) 现在,covers表的声明如下:
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));";