Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    31

    Inserire record multipli

    Ciao, voglio inserire dei record multipli nel database, con la relativa data, 1 record ogni mese. In pratica l'utente sceglie la data di inizio (per esempio 11/04/2014) e la data di fine (per esempio 11/12/2014), quindi, in questo caso, devono essere inseriti 9 record.
    Dopo un lungo lavoro sono riuscito a creare questo codice, ma ha un problema, se prendiamo l'esempio scritto sopra non vengono inseriti 9 record, ma 7, vengono saltati il primo e l'ultimo.

    Spero di avere spiegato bene e grazie per l'aiuto.
    codice:
    
    
    codice:
    public void InsRecords(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        ContentValues cv = new ContentValues();
    
        if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio){
            SimpleDateFormat sdf1 = new SimpleDateFormat( "yyyy-MM-dd" );
    
            for(int i=0; dateAndTime.getTime().before(dateAndTime1.getTime()); i++) 
            {
                dateAndTime.add(Calendar.MONTH, 1);
               
                if (dateAndTime.getTime().before(dateAndTime1.getTime())){
                     String strDate = sdf1.format(dateAndTime.getTime());
                     cv.put(eTable.DATE, strDate);
                     db.insert(eTable.TABLE_NAME, null, cv);
                }
            }
            db.close();
        }



    Ultima modifica di GffJkc; 11-04-2014 a 18:58

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Questo è un modo semplice e corretto per farlo:

    codice:
    import java.text.*;
    import java.util.*;
    
    public class Prova {
        public static void main(String[] args) {
            GregorianCalendar c1 = new GregorianCalendar(2014, Calendar.APRIL, 11);
            GregorianCalendar c2 = new GregorianCalendar(2014, Calendar.DECEMBER, 11);
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    
            while (c1.compareTo(c2) <= 0) {
                System.out.println(sdf1.format(c1.getTime()));
                c1.add(Calendar.MONTH, 1);
            }
        }
    }

    Output:
    2014-04-11
    2014-05-11
    2014-06-11
    2014-07-11
    2014-08-11
    2014-09-11
    2014-10-11
    2014-11-11
    2014-12-11
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    31
    ho fatto come dici tu, in pratica è la stessa cosa....ma resta il fatto che il primo record e l'ultimo non viene registrato...ecco il mio metodo:
    codice:
     GregorianCalendar dateAndTime = (GregorianCalendar) GregorianCalendar.getInstance();
    GregorianCalendar dateAndTime1 = (GregorianCalendar) GregorianCalendar.getInstance();
    public void InsRecords(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        ContentValues cv =newContentValues();
    
        if(mRadioGroup.getCheckedRadioButtonId()== R.id.radio){
            SimpleDateFormat sdf1 =newSimpleDateFormat("yyyy-MM-dd");
    
                while (dateAndTime.compareTo(dateAndTime1) <= 0){
                 dateAndTime.add(Calendar.MONTH, 1);
               
                if(dateAndTime.getTime().before(dateAndTime1.getTime())){
                     String strDate = sdf1.format(dateAndTime.getTime());
                     cv.put(eTable.DATE, strDate);
                     db.insert(eTable.TABLE_NAME,null, cv);
                }
            }
            db.close();
        }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GffJkc Visualizza il messaggio
    ho fatto come dici tu, in pratica è la stessa cosa....
    No, non è la stessa cosa del mio ... guarda bene. Innanzitutto fai un doppio test, nel while e nel if (perché?) e poi comunque incrementi il mese prima dell'uso (quindi la partenza la salti sicuramente)!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    31
    Scusa, ma queste date mi stanno facendo impazzire..
    Ora sono a questo punto, ho tolto l'if dopo il ciclo while ed il risultato è che il primo record non viene inserito ma ne viene aggiunto uno in più e cioè se dò come data di partenza il 01/01/2014 e come data finale 01/04/2014 vengono inseriti i record nei mesi Feb, Mar, Apr e Maggio:
    codice:
    GregorianCalendar dateAndTime =(GregorianCalendar)GregorianCalendar.getInstance();
    GregorianCalendar dateAndTime1 =(GregorianCalendar)GregorianCalendar.getInstance();
    publicvoidInsRecords(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        ContentValues cv =newContentValues();
    
        if(mRadioGroup.getCheckedRadioButtonId()== R.id.radio){
            SimpleDateFormat sdf1 =newSimpleDateFormat("yyyy-MM-dd");
    
            while(dateAndTime.compareTo(dateAndTime1)<=0){
                 dateAndTime.add(Calendar.MONTH,1);
               
               
                     String strDate = sdf1.format(dateAndTime.getTime());
                     cv.put(eTable.DATE, strDate);
                     db.insert(eTable.TABLE_NAME,null, cv);
               
            }
            db.close();
        }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GffJkc Visualizza il messaggio
    Ora sono a questo punto, ho tolto l'if dopo il ciclo while ed il risultato è che il primo record non viene inserito ma ne viene aggiunto uno in più
    Scusa, capisco che magari sei agli inizi, però ti chiederi di "ragionare" un pochino, perché è questo che serve nella programmazione.
    Lo vedi che incrementi il mese prima di usare la data?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    31
    hai ragione, sono un pirla.
    Ora ho un altro problema e cioè: se decido come data iniziale il 31 gennaio e come data finale il 31 Luglio, ovviamente quando arriva Febbraio che ne ha 28, poi i record dei mesi successivi verranno inseriti sempre con il giorno 28 perchè lui prende in considerazione l'ultimo giorno precedente. Come posso fare? potrei inserire un controllo che verifica questa cosa....sapresti suggerirmi una strada più "facile"?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GffJkc Visualizza il messaggio
    se decido come data iniziale il 31 gennaio e come data finale il 31 Luglio, ovviamente quando arriva Febbraio che ne ha 28, poi i record dei mesi successivi verranno inseriti sempre con il giorno 28
    Sì, è vero, la logica di Calendar è quella ed è di per sé corretta.

    Una soluzione semplice: invece di aggiornare ogni volta di +1 mese la prima data, crei una copia dell'oggetto (metodo clone() ) e ci aggiungi ad ogni ciclo 1 ... 2 ... 3 .... N mesi.
    Detto in altro modo: parti sempre dal primo oggetto Calendar (che non viene più "toccato") e lo cloni aggiungendo poi N mesi (devi avere una variabile n che si incrementa di 1).

    Se hai dubbi, chiedi pure.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    31
    Grazie mille per la tua disponibilità, proverò come hai suggerito.
    a presto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.