Android sqlite查询没有返回它应该

时间:2016-05-19 14:49:48

标签: android sqlite cursor

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

我正在使用日历,当点击某一天时,我正在调用当天事件和每个事件的绘图标记的地图。

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

2 个答案:

答案 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;日期,但我没有得到日期等于开始和结束日期的行...