mercredi 24 février 2016

How to check for dates if they dose not overlap?

I am creating an events. This I am storing in database. I want to check if current event dose overlap with other events in database.

The start time and end time I have stored in date format. I have a query to check if event dose overlap.

But sometimes events are getting overlapped. How to check for dates if they dose not overlap?

Query:

 boolean doesEventOverlap(String startTime, String endTime, String day) {
    String selectQuery = "SELECT COUNT(*) FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'" + " AND "

            + "(" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + endTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " ('" + startTime + "' < " + KEY_FROM_DATE
            + " AND " + KEY_TO_DATE + " < '" + endTime + "')";

    //  + KEY_DAY_OF_WEEK + " = '" + day + "'";;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            EventData event = new EventData();
            return cursor.getInt(0) > 0;
        } while (cursor.moveToNext());
    }
    return false;
}

Create table :

public void createTable(SQLiteDatabase db){
    String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_TITLE + " TEXT,"
            + KEY_FROM_DATE + " DATE,"
            + KEY_TO_DATE + " DATE,"
            + KEY_DAY_OF_WEEK + " TEXT,"
            + KEY_LOCATION + " TEXT,"
            + KEY_NOTIFICATION_TIME + " DATE,"
            + KEY_COLOR + " TEXT" + ")";

    db.execSQL(CREATE_EVENTS_TABLE);
}

save code :

 save.setOnClickListener(new View.OnClickListener() {
        String log;
        @Override
        public void onClick(View v) {
            eventTitle = title.getText().toString();
            location = mAutocompleteView.getText().toString();

            if (eventTitle.length() == 0) {

                showAlert("Title can not be empty.");

            }

            else {

                if (!editMode)

                {
                    if (db.doesEventOverlap(startTime, endTime, dayOfWeek)) {

                        showAlert("Event Exists");

                    } else {

                        db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location, notificationTime, mColor));
                        showAlert("Event Added.");
                    }
                }

                if (editMode) {

                    db.deleteEvent(eventData);

                    List<EventData> events = db.getAllEvents();
                    for (EventData cn : events) {
                        String log = "Id: " + cn.getId() + " ,Title: " + cn.getTitle() +
                                "Date: " + cn.getFromDate() + ",Todate: " + cn.getToDate() + "Location:" + cn.getLocation() + "Day of week"
                                + cn.getDayOfWeek() + "Notifiction time" + cn.getNotificationTime();

                        Log.d("Data ", log);
                    }

                    if (db.doesEventOverlap(startTime, endTime, dayOfWeek)) {

                        showAlert("Event Exists");

                    }

                    else
                    {

                        db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location, notificationTime, mColor));
                        showAlert("Event Updated.");
                    }
                }
            }
        }
    });

What's wrong with this query?

Aucun commentaire:

Enregistrer un commentaire