Android sqlite 查询没有返回它应该返回的内容

Android sqlite query not returning what it should

这已经困扰我一段时间了,我似乎无法弄明白。

我正在使用日历,当单击某一天时,我将调用包含当天事件并为每个事件绘制标记的地图。

    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 运算符时,地图现在会显示点击日期的那些事件,但是当我用 OR 代替 AND 时,地图会显示每天的所有事件。

那么问题出在哪里呢?查询应该是正确的,例如,如果我在第 18 天有事件持续到同一个 18 日,它看起来像这样:where start_date<=2016-05-18 AND end_date>=2016-05-18 因此应该 return 那天的所有事件,而不是从数据库中获取任何内容...

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;
}

我需要提到我所有的数据库字段都是文本,我得到的日期格式 String date 是 yyyy-MM-dd,数据库字段也是如此 START_DATEEND_DATE.

这实际上应该是评论。但我没有足够的代表发表评论。所以发布这个作为答案。

尝试将 where 子句更改为

eventai.InsertNewEvent.START_DATE+" >= "+date+" AND "+eventai.InsertNewEvent.END_DATE+" <= "+date;

来自

eventai.InsertNewEvent.START_DATE+" <= "+date+" AND "+eventai.InsertNewEvent.END_DATE+">= "+date;

所以我在这里缺少单引号,所以解决方案如下:

eventai.InsertNewEvent.START_DATE+" <= '"+date+"' AND "+eventai.InsertNewEvent.END_DATE+" >= '"+date+"'";

但这不是一个完整的解决方案...我只得到行,其中 start_date < 日期和 end_date > 日期,但我没有得到日期等于开始日期和结束日期的行...