2016-04-06 3 views
0

Я написал метод в моем классе базы данных, который выполняет поиск в базе данных в зависимости от того, какой именно день он, однако, хотя данные верны, результатов нет.Возврат данных SQLite в зависимости от текущего дня - нет результатов

Может ли кто-нибудь понять, почему он ничего не вернет? Я пробовал около 15 различных вариаций в SQL Query, поэтому я довольно застрял!

Метод заключается в следующем в моем DB.java:

public List<tableModules> getModuleTime(String module1, String module2, String module3, String day) { 
     List<tableModules> moduleList = new ArrayList<tableModules>(); 
     // Select All Query  
     SQLiteDatabase db = this.getWritableDatabase();   
     Cursor cursor = db.rawQuery("SELECT modulename, modulelecturetime, moduleseminartime FROM " + Table2 + " WHERE (modulename=? OR modulename=? OR modulename=?) AND (modulelecturedate=? OR moduleseminardate=?)", new String[]{module1, module2, module3, day, day});  
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       tableModules module = new tableModules(); 
       module.modulename = cursor.getString(0); 
       module.modulelecturedate = cursor.getString(1); 
       module.moduleseminardate = cursor.getString(2); 
       moduleList.add(module); 
      } while (cursor.moveToNext()); 
     } 
     else 
     { 
      Log.d("Cant", "Find any lectures today"); 
     } 
     // return contact list 
     return moduleList;  
    } 

я затем использовать этот метод в MainActivity к югу данные в:

public void getTodaysModules(String sessionName) 
    { 
     List<tableStudents> studentModules = db.getStudentsModules(sessionName);  
     if (!studentModules.isEmpty()) 
     {   
     for (tableStudents session: studentModules) 
     { 
      //Save modules to string 
      String module1 = session.modules.toString(); 
      String module2 = session.modules1.toString(); 
      String module3 = session.modules2.toString();   
      String today = getCurrentDay().toString();   
      Toast.makeText(MainActivity.this, "Today is: " + today, Toast.LENGTH_LONG).show(); 
      TextView event1 = (TextView)findViewById(R.id.event1); 
      event1.setText(today + "'s Events:"); 
      List<tableModules> moduleDayList = db.getModuleTime(module1, module2, module3, today); 
       for (tableModules module: moduleDayList) {      

        if(!module.modulelecturedate.isEmpty()) 
        {      
         event1.setText("Your Lecture for" + module.modulename.toString() + "is at" + module.modulelecturetime.toString()); 
        }     
        if (!module.moduleseminardate.isEmpty()) 
        {     
         event1.setText("Your Seminar for" + module.modulename.toString() + "is at" + module.moduleseminartime.toString()); 
        } 
        else 
        { 
         event1.setText("You have no seminars/lectures today"); 
        }    
       } 
      } 
     } 
     else 
     { 
      Toast.makeText(MainActivity.this, "N", Toast.LENGTH_LONG).show();   
     } 

    } 

ответ

1

Вот ваш SQL является читаемым способом:

Cursor cursor = db.rawQuery("SELECT modulename, modulelecturetime, moduleseminartime" + 
          " FROM " + Table2 + 
          " WHERE modulename=?" + 
           " OR modulename=?" + 
           " OR modulename=?" + 
           " AND (modulelecturedate=?" + 
           " OR moduleseminardate=?)", 
          new String[]{module1, module2, module3, day}); 

Как вы заметили, есть 5 маркеров, но вы только поставить 4 значения.

Кроме того, помните, что AND имеет более высокий приоритет, то OR, поэтому SQL на самом деле:

SELECT modulename, modulelecturetime, moduleseminartime 
    FROM xxx 
WHERE modulename=? 
    OR modulename=? 
    OR (modulename=? 
    AND (modulelecturedate=? OR moduleseminardate=?)) 

Это то, что вы хотели? Я предполагаю, что вы хотели бы:

SELECT modulename, modulelecturetime, moduleseminartime 
    FROM xxx 
WHERE (modulename=? OR modulename=? OR modulename=?) 
    AND (modulelecturedate=? OR moduleseminardate=?) 
+0

я первоначально имел 5 значений, однако получили те же результаты –

+0

я буду обновлять свой код в секунду –

+0

Являются ли два столбца даты «VARCHAR»? Если нет, то почему '' '' 'String'? Кроме того, являются ли они чистыми датами или датой + временем? – Andreas

0

Это выглядит, как вы не хватает «дня» в массиве selectionArgs. У вас пять? и только четыре аргумента. Он должен дать вам сообщение, если вы проверите свои журналы.

+0

я первоначально был дополнительный «день» там, однако это были те же самые результаты –

Смежные вопросы