0
私のプロジェクトでは、SQLiteDatabase.query関数を使ってDBからデータを取得しています。クエリは次のとおりです。アンドロイドのSQlite WHERE句が機能しません
Cursor c = db.query("event as ev left join logo as l ON ev.logo_id = l.logo_id",
new String[] {"ev.event_id", "ev.name", "ev.event_date", "ev.type", "l.path"},
"strftime('%m', 'now') <= ? OR (strftime('%d', 'now') <= ? " +
"AND strftime('%m', 'now') == ?)",
new String[] {"strftime('%m', ev.event_date)", "strftime('%d', ev.event_date)",
"strftime('%m', ev.event_date)"}, null, null,
"strftime('%m', ev.event_date), strftime('%d', ev.event_date) ASC", limit);
イベントテーブルの内容:
1|День Рождения|1964-09-10 00:00:00|birthday|1
2|День Рождения|1964-06-10 00:00:00|birthday|2
3|День Рождения|1985-01-01 00:00:00|birthday|3
4|День Рождения|1992-05-11 00:00:00|birthday|4
ロゴテーブルの内容:
1|/data/data/com.example.app/app_imageDir/imageavatar_14e18a68-7049-433f-9954-fb3fea6000e1.png
2|/data/data/com.example.app/app_imageDir/imageavatar_5dda2aec- 136e-468d-af04-ca6e74804765.png
3|/data/data/com.example.app/app_imageDir/imageavatar_d1626db3-3f7c-474d-8294-c498f40c6892.png
4|/data/data/com.example.app/app_imageDir/imageavatar_d2f995a1-ae3c-41fd-8bdd-c69b1566239a.png
クエリから次のようにカーソルがEVENT_IDでイベントだけが含まれている必要があります1,2,4(3月13日にテスト済み) しかし、私がアプリケーションを起動すると、すべてのイベントが画面に表示されます。 このクエリを書き直してsqliteのコンソールから実行すると、すべて正常に動作します。
カーソルからデータを取得するためのコードは次のとおりです。
public List<Map<String, String>> getAll(Cursor c) {
List<Map<String, String>> data = new ArrayList<>();
int counter = 0;
if (c.moveToFirst()) {
do {
Map<String, String> map = new HashMap<String, String>();
for (String cn : c.getColumnNames()) {
map.put(cn, c.getString(c.getColumnIndex(cn)));
}
data.add(counter, map);
counter++;
} while (c.moveToNext());
}
return data;
}
問題は何ですか?