这已经困扰了我一段时间了,我似乎无法弄明白。
我正在使用日历,当点击某一天时,我正在调用当天事件和每个事件的绘图标记的地图。
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Bundle extras = getIntent().getExtras();
String date_clicked = extras.getString("PASSED_DATE");
title.setText(date_clicked);
dbHelper helper = new dbHelper(getApplicationContext());
Cursor cursor = helper.getAllEventsByDay(this, date_clicked);
Log.d("MapsActivity", "date_clicked " + date_clicked);
if (cursor.moveToFirst())
{
do {
String row_loc = cursor.getString(0);
String row_title = cursor.getString(1);
Log.d("DayEvents", "row_loc " + row_loc);
if (!row_loc.isEmpty()) {
LatLng hcmus = getLocationFromAddress(getApplicationContext(), row_loc);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(hcmus, 18));
originMarkers.add(mMap.addMarker(new MarkerOptions()
.title(row_title)
.position(hcmus)));
}
}while(cursor.moveToNext());
}
mMap.setMyLocationEnabled(true);
}
我在本月X天的数据库中有几个事件,它们在同一天开始和结束。
有趣的是,当我在查询中使用AND运算符时,map现在会显示点击日的事件,但是当我使用OR而不是AND时,地图会向我显示每天的所有事件。
那么哪里可能有问题?查询应该是正确的,例如,如果我在第18天持续到第18天的事件,它将如下所示:where start_date<=2016-05-18 AND end_date>=2016-05-18
因此应该返回当天的所有事件,而不是从数据库中取出任何内容...
dbHelper.java
光标:
public Cursor getAllEventsByDay(Activity activity,String date) {
SQLiteDatabase db = getReadableDatabase();
String from[] = { eventai.InsertNewEvent.LOCATION, eventai.InsertNewEvent.EVENT, eventai.InsertNewEvent.START_TIME};
String where = eventai.InsertNewEvent.START_DATE+" <= "+date+" AND "+eventai.InsertNewEvent.END_DATE+">= "+date;
Cursor cursor = db.query(eventai.InsertNewEvent.TABLE_NAME, from, where, null, null, null, null, null);
Log.d("MapsActivity", "CURSOR " + from + where);
return cursor;
}
我需要提一下,我的所有数据库字段都是TEXT,而我作为String date
得到的日期格式是yyyy-MM-dd,数据库字段START_DATE
和{{ 1}}。
答案 0 :(得分:0)
这实际上应该是一个评论。但我没有足够的代表发表评论。所以将此作为答案发布。
尝试将where子句更改为
eventai.InsertNewEvent.START_DATE+" >= "+date+" AND "+eventai.InsertNewEvent.END_DATE+" <= "+date;
这
eventai.InsertNewEvent.START_DATE+" <= "+date+" AND "+eventai.InsertNewEvent.END_DATE+">= "+date;
答案 1 :(得分:0)
所以我在这里缺少单引号,所以解析如下:
eventai.InsertNewEvent.START_DATE+" <= '"+date+"' AND "+eventai.InsertNewEvent.END_DATE+" >= '"+date+"'";
但这不是一个完整的解决方案......我只获得行,其中start_date&lt; date和end_date&gt;日期,但我没有得到日期等于开始和结束日期的行...