2016-02-04 79 views
0

我有事件表包含開始時間,結束時間,dayOfWeek,位置等我想根據dayOfweek檢索記錄。我將dayOfWeek存儲爲字符串(「Mon」,「Tue」等)。選擇查詢星期幾?

我該如何檢索每一天的記錄?

這是我的EventTableHelper。

public class EventTableHelper extends SQLiteOpenHelper { 


    private static final String TABLE = "event"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_TITLE = "title"; 
    private static final String KEY_FROM_DATE = "datefrom"; 
    private static final String KEY_TO_DATE = "dateto"; 
    private static final String KEY_DAY_OF_WEEK = "dayofweek"; 
    private static final String KEY_LOCATION = "location"; 
    private static final String KEY_NOTIFICATION_TIME = "notification"; 


    public EventTableHelper(Context context) { 
     super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    } 

    public void createTable(SQLiteDatabase db){ 
     String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE+ "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," 
       + KEY_TITLE + " TEXT," 
       + KEY_FROM_DATE + " DATE," 
       + KEY_TO_DATE + " DATE," 
       + KEY_DAY_OF_WEEK + " TEXT," 
       + KEY_LOCATION + " TEXT," 
       + KEY_NOTIFICATION_TIME + "TEXT" + ")"; 
     db.execSQL(CREATE_EVENTS_TABLE); 
    } 
    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE); 

     // createTable(db); 
     // onCreate(db); 
    } 

    public void addEvent(EventData event) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_TITLE,event.getTitle()); 
     values.put(KEY_FROM_DATE, event.getFromDate()); 
     values.put(KEY_TO_DATE,event.getToDate()); 
     values.put(KEY_DAY_OF_WEEK,event.getDayOfWeek()); 
     values.put(KEY_LOCATION,event.getLocation()); 
     values.put(KEY_NOTIFICATION_TIME,event.getNotificationTime()); 

     db.insert(TABLE, null, values); 

     db.close(); 
    } 

    EventData getEvent(int id) { 

     SQLiteDatabase db = this.getReadableDatabase(); 
     EventData eventData = new EventData(); 
     Cursor cursor = db.query(TABLE, new String[]{KEY_ID, 
         KEY_TITLE, KEY_FROM_DATE, KEY_TO_DATE, KEY_DAY_OF_WEEK, KEY_LOCATION}, KEY_ID + "=?", 
       new String[]{String.valueOf(id)}, null, null, null, null); 

     if(cursor != null && cursor.moveToFirst()) { 
      eventData = new EventData(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), 
        cursor.getString(3), cursor.getString(4), cursor.getString(5),cursor.getString(6)); 

     } 
     return eventData; 
    } 

    public List<EventData> getAllEvents() { 
     List<EventData> conList = new ArrayList<EventData>(); 

     String selectQuery = "SELECT * FROM " + TABLE ; 

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

     if (cursor.moveToFirst()) { 
      do { 

       EventData event = new EventData(); 

       event.setId(Integer.parseInt(cursor.getString(0))); 
       event.setTitle(cursor.getString(1)); 
       event.setFromDate(cursor.getString(2)); 
       event.setToDate(cursor.getString(3)); 
       event.setDayOfWeek(cursor.getString(4)); 
       event.setLocation(cursor.getString(5)); 
       event.setNotificationTime(cursor.getString(6)); 

       conList.add(event); 
      } while (cursor.moveToNext()); 
     } 

     return conList; 
    } 



    public int updateEvent(EventData event) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_TITLE,event.getTitle()); 
     values.put(KEY_FROM_DATE,event.getFromDate()); 
     values.put(KEY_TO_DATE,event.getToDate()); 
     values.put(KEY_DAY_OF_WEEK,event.getDayOfWeek()); 
     values.put(KEY_LOCATION,event.getLocation()); 
     values.put(KEY_NOTIFICATION_TIME,event.getNotificationTime()); 


     // updating row 
     return db.update(TABLE, values, KEY_ID + " = ?", 
       new String[] { String.valueOf(event.getId()) }); 
    } 
    public void deleteEvent(EventData eventData) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE, KEY_ID + " = ?", 
       new String[]{String.valueOf(eventData.getId())}); 
     db.close(); 
    } 

    } 

我試圖找回這樣的:

public List<EventData> getAllEvents(String day) { 
     List<EventData> conList = new ArrayList<EventData>(); 

     String selectQuery = "SELECT * FROM " + TABLE + " WHERE (" + KEY_DAY_OF_WEEK + " = " + day; 

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

     if (cursor.moveToFirst()) { 
      do { 

       EventData event = new EventData(); 

       event.setId(Integer.parseInt(cursor.getString(0))); 
       event.setTitle(cursor.getString(1)); 
       event.setFromDate(cursor.getString(2)); 
       event.setToDate(cursor.getString(3)); 
       event.setDayOfWeek(cursor.getString(4)); 
       event.setLocation(cursor.getString(5)); 
       event.setNotificationTime(cursor.getString(6)); 

       conList.add(event); 
      } while (cursor.moveToNext()); 
     } 

     return conList; 
    } 

但它給語法錯誤:

android.database.sqlite.SQLiteException: near "Mon": syntax error (code 1): , while compiling: SELECT * FROM event WHERE (dayofweek = Mon) 

我檢索這樣的活動:

String day = "Mon" 
    mDb = new EventTableHelper(getActivity()); 
    events = mDb.getAllEvents(day); 

我在另一項活動中節省dayOfWeek。我想檢索片段中的記錄。我不知道如何在函數中傳遞day參數。

回答

2

不喜歡通行證價值single quote

String selectQuery = "SELECT * FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK +" = '"+day+ "'"; 
+0

如何傳遞的功能? events = mDb.getAllEvents();這裏? – Sid

+0

@Sid使用像'mDb.getAllEvents( 「星期一」);' –

+0

仍然給例外:e.SQLiteException:近 「 '星期一'」:語法錯誤(代碼1):在編譯:SELECT * FROM事件WHERE(星期幾=「星期一」 – Sid

0

替換此

String selectQuery = "SELECT * FROM " + TABLE + " WHERE (" + KEY_DAY_OF_WEEK + " = " + day; 

String selectQuery = "SELECT * FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'";