Autore Topic: Sqlite e android, problema con le date  (Letto 692 volte)

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Sqlite e android, problema con le date
« il: 21 Marzo 2013, 17:59:43 CET »
0
Ciao a tutti,
ho un paio di problemi con le date in sqlite che mi stanno facendo impazzire.

Questa è la tabella del database che creo nell'Helper
Codice (Java): [Seleziona]
                String sqlTrk = "CREATE TABLE tblTrack ( " +
                                "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                                "nome TEXT NOT NULL, " +
                                "distanza FLOAT NOT NULL, " +
                                "vMax FLOAT NOT NULL, " +
                                "vMedia FLOAT NOT NULL, " +
                                "dataInizio TIMESTAMP DEFAULT (strftime('%s', 'now')) NOT NULL, " +
                                "dataFine TIMESTAMP)";

Il primo problema riguarda l'update. In particolare sulle 2 date (dataFine e dataInizio).
Dopo aver cercato in rete per tutto il pomeriggio, non ho idea di quale sia il formato accettato da TIMESTAMP (la doc di sql lite dice che può essere una stringa, un real o un integer ma dove lo specifico?) per cui non so cosa passargli...

Inizialmente credevo le date venissero immagazzinate come Long in millisecondi a partire dal 1970, invece a quanto pare non è così. Qual'è il formato corretto?

Il secondo problema è legato al primo. Non sapendo quale sia il formato di TIMESTAMP non riesco a creare una query di select che mi cerchi se ci sono record con dataFine vuota.

La query che faccio è la seguente
Codice (Java): [Seleziona]
Cursor numTraccia = dbTrk.rawQuery("SELECT _id, dataInizio, dataFine FROM tblTrack WHERE dataFine = null", null);
Ho provato anche a mettere > 0 ma senza risultato...


Aiutooo

Grazie in anticipo ;)



Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Sqlite e android, problema con le date
« Risposta #1 il: 21 Marzo 2013, 18:35:53 CET »
0
SqLite ha un supporto per le date ridicolo, se comparato ad altri database (per quanto lite).
Il mio consiglio spassionato è di non usare nelle tabelle delle colonne di tipo TIMESTAMP ma metterle di tipo numerico e salvarci detro i millisecondi tornati dal getTime() della classe Date.
E' vero che hai la rottura di scatole di dover fare la conversione ogni volta che leggi/scrivi il dato, ma di contro puoi fare le query di confronto tra date senza eccessivi problemi e senza impazzire sul formato usato.
Io dopo averci sbattuto la testa sopra ho deciso di fare così e, per quel che mi serve, mi trovo bene.

Sull'ultimo punto:
Codice (SQL): [Seleziona]
WHERE dataFine IS NULL
« Ultima modifica: 21 Marzo 2013, 18:37:45 CET da Sakazaki »

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Sqlite e android, problema con le date
« Risposta #2 il: 21 Marzo 2013, 18:44:41 CET »
0
Grazie mille ;)

L'idea di tenere i valori in intero c'era già, per cui direi che allora trasformo TIMESTAMP in... BIGINT? o basta un semplice INTEGER?

Qual'è il corrispondente di sqlite per i long di java?


Grazie ancora :)

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Sqlite e android, problema con le date
« Risposta #3 il: 21 Marzo 2013, 19:42:14 CET »
0
Grazie mille ;)

L'idea di tenere i valori in intero c'era già, per cui direi che allora trasformo TIMESTAMP in... BIGINT? o basta un semplice INTEGER?

Qual'è il corrispondente di sqlite per i long di java?


Grazie ancora :)
Direi integer, tralasciando real e text...
Citazione
1.2 Date and Time Datatype

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

    TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
    REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
    INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.

Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Sqlite e android, problema con le date
« Risposta #4 il: 21 Marzo 2013, 20:27:18 CET »
0
Grazie!
dopo provo a far partire il servizio e vedo che succe   :D speriamo non faccia il botto


Ciao

Post unito: 22 Marzo 2013, 09:36:39 CET
Perfetto funziona :D

Grazie a tutti
« Ultima modifica: 22 Marzo 2013, 09:36:39 CET da crc_error, Reason: Merged DoublePost »