解決しました。2日が経過するまで回答を受け入れることができません. 結局、sqliteman が古いデータベースを読み取っていたことが判明しました。
Android でデータベースから読み取ろうとしていますが、結果が得られません。奇妙なことに、sqliteman (sqlite マネージャー) で同じデータベースに対してまったく同じクエリを実行すると、完全に機能します。
DB ハンドラ クラスでのクエリ:
//exact same as in code
String fetchVaccinesForCountryQuery =
"SELECT v._id, v.vname, v.text " +
"FROM vaccine v, vacc_disease vc " +
"WHERE v._id = vc.vaccineId and vc.diseaseId IN (SELECT cd.diseaseId " +
"FROM country_disease cd " +
"WHERE cd.countryId = %d)";
//and a version that's a bit easier to read...
String fetchVaccinesForCountryQuery =
"SELECT v._id, v.vname, v.text
FROM vaccine v, vacc_disease vc
WHERE v._id = vc.vaccineId and vc.diseaseId
IN (SELECT cd.diseaseId
FROM country_disease cd
WHERE cd.countryId = %d)";
public Cursor fetchVaccinesForCountry(long countryId) {
String query = String.format(fetchVaccinesForCountryQuery, countryId);
Log.d("TripDb", "fetchStr: " + query);
return mDb.rawQuery(query, null);
}
その関数を呼び出す情報プロバイダーを作成しました。
Cursor c = mDb.fetchVaccinesForCountry(countryId);
Log.d("InfoProvider", "numVaccines = " + c.getCount());
クエリを示す logcat 文字列は次のようになります。
fetchStr: SELECT v._id, v.vname, v.text FROM vaccine v, vacc_disease vc WHERE v._id = vc.vaccineId and vc.diseaseId IN (SELECT cd.diseaseId FROM country_disease cd WHERE cd.countryId = 3)
Logcat表示番号は
numVaccines = 0
しかし、adb を使用してデータベースをプルし、SqliteMan で同じクエリを実行すると、7 つの結果が得られます。なぜ Android で 7 つの結果が得られないのか、ちょっと困惑しています。