2017-09-30 3 views
0

J'essaie de décrire mon code plus clairement.Comment obtenir les 7 derniers jours et le commander si le format de la date est aaaaMdj?

Voici donc ma question:

Je suis coincé avec ma base de données, je veux rechercher plus tard 7 jours, mais je conserver mon format de date est yyyymdd comme 2017/9/30 enter image description here Si je veux rechercher tous mes dossiers et l'ordre, mon réussir code comme ceci:

public List<Contact> sortingDate() { 
     List<Contact> contactList = new ArrayList<>(); 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS +" ORDER BY\n" + 
       " SUBSTR(Date, 1, 4) DESC,\n" + 
       " CASE WHEN INSTR(SUBSTR(Date, 6), '/') = 2\n" + 
       "   THEN '0' || SUBSTR(Date, 6, 1)\n" + 
       "   ELSE SUBSTR(Date, 6, 2) END DESC,\n" + 
       " CASE WHEN LENGTH(SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1)) = 1\n" + 
       "   THEN '0' || SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1)\n" + 
       "   ELSE SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1) END DESC; ",null); 
     //looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setDate(cursor.getString(1)); 
       contact.setBeforeMorning(cursor.getString(2)); 
       contact.setAfterMorning(cursor.getString(3)); 
       contact.setBeforeNoon(cursor.getString(4)); 
       contact.setAfterNoon(cursor.getString(5)); 
       contact.setBeforeNight(cursor.getString(6)); 
       contact.setAfterNight(cursor.getString(7)); 
       System.out.println("The result is :" + cursor.getString(1)); 
       //Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 

     return contactList; 
    } 

il imprimera: enter image description here

et puis-je essayer d'ajouter dernière recherche jours code pour ma fonction, je fixer une date par défaut 2017/09/30

// order latest days 
    public List<Contact> latestDays() { 
     List<Contact> contactList = new ArrayList<>(); 
     // Database time format is: yyyymdd 
     Calendar mCalendar = new GregorianCalendar(); 
     int mYear = mCalendar.get(Calendar.YEAR); 
     int mMonth = mCalendar.get(Calendar.MONTH)+1; 
     int mDay = mCalendar.get(Calendar.DAY_OF_MONTH); 
     String today = String.valueOf(mYear).concat(String.valueOf(mMonth).concat(String.valueOf(mDay))); 
     System.out.println(today+"today"); 
     SQLiteDatabase db = this.getWritableDatabase(); 
     // WHERE date...it is what i try the code 
     Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS +" WHERE date > (SELECT DATETIME('2017/09/30'," + " ' -7" + " day'))" + 
       " ORDER BY\n" + 
       " SUBSTR(Date, 1, 4) DESC,\n" + 
       " CASE WHEN INSTR(SUBSTR(Date, 6), '/') = 2\n" + 
       " THEN '0' || SUBSTR(Date, 6, 1)\n" + 
       " ELSE SUBSTR(Date, 6, 2) END DESC,\n" + 
       " CASE WHEN LENGTH(SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1)) = 1\n" + 
       " THEN '0' || SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1)\n" + 
       " ELSE SUBSTR(SUBSTR(Date, 6), INSTR(SUBSTR(Date, 6), '/') + 1) END DESC; ",null); 

     //looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setDate(cursor.getString(1)); 
       contact.setBeforeMorning(cursor.getString(2)); 
       contact.setAfterMorning(cursor.getString(3)); 
       contact.setBeforeNoon(cursor.getString(4)); 
       contact.setAfterNoon(cursor.getString(5)); 
       contact.setBeforeNight(cursor.getString(6)); 
       contact.setAfterNight(cursor.getString(7)); 
       System.out.println("The result is :" + cursor.getString(1)); 
       //Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 

     return contactList; 
    } 

J'appelle ma fonction:

private DatabaseHandler db; 
contactList = db.latestDays(); 
System.out.println(contactList.size()); 

Il montre System.out: 0

Alors quel code me manque si je veux Recevoir les 7 derniers jours comme 2017/9/242017/9/292017/9/30 dans ma base de données?

Toute aide serait appréciée. Merci d'avance.

+0

Essayez d'utiliser la déclaration BETWEEN en Sqlite – Grendel

+0

Hey merci pour la réponse, j'essaie aussi WHERE Date entre le 23/8/2017 et 29/9/2017, c'est st Je n'ai pas travaillé :( –

+0

J'ai été occupé avec mon propre problème de code Je vais essayer d'écrire un petit code qui récupérera toutes les données dans un sqlite db entre deux dates distantes de 7 jours Nous sommes sur Besoin d'utiliser l'instruction SELECT mais je suis sûr que vous savez que Montrez-moi votre nouveau SELECT SELECT avec BETWEEN – Grendel

Répondre

2

Ce fut une véritable expérience d'apprentissage et en raison des changements actuels est la façon dont les dates sont utilisées dans Android et Java cette réponse devra être révisée. La question était de savoir comment trouver toutes les dates entre une gamme de 7 jours dans une base de données sqlite. D'ABORD le concept le plus important est comment les données sont formatées dans le DB ce format 10-18-2017 comme une chaîne a de nombreux problèmes alors que ce format 10182017 n'est pas très lisible sauf si vous êtes un ordinateur NON! Alors stockez les dates comme ceci 10152017 et ensuite pour les afficher comme ceci 10-18-2017 Ma conception de DB a déclaré la variable de date comme TEXT Suggérer des tests avec INTEGER pas si sûr que ça fonctionnera mieux à moins de faire tous les entiers de la même longueur 10182017 nous avons eu des problèmes avec cette date 1.012.017 utilisation et entier pour le motif de recherche est ici le code de requête profiter

public List<DBModel> getDataFromDB(){ 
    //String query = "SELECT * FROM " + TABLE_INFO + " WHERE " + Col_PURCHASE_DATE + " > 0 " + " ORDER BY " + Col_ID + " DESC "; 
    /* Notice the SPACES before AND after the words WHERE ORDER BY ASC or DESC most of all the condition " > 0 "*/ 
    /* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=*/ 
    Cursor cursor = null; 
    List<DBModel> modelList = new ArrayList<>(); 
    if(use == true){ 
     //String query = "SELECT * FROM " + TABLE_INFO + " WHERE " + Col_PURCHASE_DATE + " ='" + selectSTRING + "'"; 
     String query = "SELECT * FROM " + TABLE_INFO + " WHERE " + Col_PURCHASE_DATE + " >= " + "'" + selectSTRING + "'" + " AND " + Col_PURCHASE_DATE + " <= " + "'" + secondSTRING + "'"; 
     //String query = "SELECT * FROM " + TABLE_INFO + " WHERE " + Col_PURCHASE_DATE + " >= " + "'"+ 1012017 +"'" + " AND " + Col_PURCHASE_DATE + " <= " + "'"+ 10312017 +"'"; 
     db = this.getWritableDatabase(); 
     cursor = db.rawQuery(query,null); 
    } 
    if(use == false){ 
     String query = "SELECT * FROM " + TABLE_INFO; 
     db = this.getWritableDatabase(); 
     cursor = db.rawQuery(query,null); 
    } 

    if (cursor.moveToFirst()){ 

     do { 
      DBModel model = new DBModel(); 
      model.setRowid(cursor.getInt(0)); 
      model.setStation_Name(cursor.getString(1)); 
      model.setDate_of_Purchase(cursor.getString(2)); 
      model.setGas_Cost(cursor.getString(3)); 
      modelList.add(model); 

      int sz = modelList.size(); 
      int out = model.setRowid(cursor.getInt(0)); 
      String out1 = model.setStation_Name(cursor.getString(1)); 
      String out2 = model.setDate_of_Purchase(cursor.getString(2)); 
      String out3 = model.setGas_Cost(cursor.getString(3)); 
      System.out.println("==============getDataFromDB ID "+out); 
      System.out.println("==============getDataFromDB Station "+out1); 
      System.out.println("==============getDataFromDB Date "+out2); 
      System.out.println("==============getDataFromDB Cost "+out3); 
      System.out.println("======= ======getDataFromDB SIZE "+sz); 

     }while (cursor.moveToNext()); 
    } 
    db.close(); 
    cursor.close(); 
    return modelList; 
} 

Voici une méthode pour traiter avec des dates qui ne sont que 7 ou 6 caractères

    if(searchTo.length()==7){ 
        StringBuilder str = new StringBuilder(searchTo); 
        System.out.println("string = " + str); 


        str.insert(2, '0'); 
        etToDate.setText(str); 
       }else if (searchFrom.length() == 6){ 
        StringBuilder str = new StringBuilder(searchFrom); 
        str.insert(0,'0'); 
        str.insert(2,'0'); 
        etFromDate.setText(str); 
       }else { 
        etToDate.setText(searchTo); 
       } 
+0

Qu'en est-il lorsque la date est seulement 6 caractères. longue?Je pensais que les entiers étaient la meilleure façon de stocker les dates –

+0

@James_Duh Je savais que quelqu'un demanderait que je modifie la réponse Pas sûr de la meilleure façon de stocker les dates cela a fonctionné et était facile J'ai testé les entiers et les mêmes résultats et problèmes avec la date – Grendel

+0

Désolé je suis occupé récemment et je vous remercie beaucoup pour votre réponse. J'espère que cela peut fonctionner à partir de votre réponse. –