0

解決しました。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 つの結果が得られないのか、ちょっと困惑しています。

4

2 に答える 2