2013-05-24 17 views
22

ho sqlite databaseCome aggiungere la data nel database SQLite

private static final String DB_PROCESS_CREATE = "create table " 
     + DB_TABLE_PROCESS + "(" + PROCESS_ID 
     + " integer primary key autoincrement, " 
     + PROCESS_DATE + " date);"; 

lo creo db.execSQL(DB_PROCESS_CREATE);

Come aggiungere valore di data in questa banca dati? ho provato:

String date = new SimpleDateFormat("yyyy.MM.dd").format(Calendar 
.getInstance().getTime()); 
ContentValues cv = new ContentValues(); 
cv.put(db.PROCESS_DATE,Date.valueOf(date)); 
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv)); 

Ma poi ho error:

"The method put(String, String) in the type ContentValues is not applicable for the arguments (String, Date)". 

risposta

39

Ora quando si desidera inserire la data nel database, è possibile utilizzare questo codice.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
String date = sdf.format(new Date()); 

Nella banca dati inserire la stringa 'data'

Il formato della data in SQLite dovrebbe essere di seguente formato:

YYYY-MM-DD 
YYYY-MM-DD HH:MM 
YYYY-MM-DD HH:MM:SS 
YYYY-MM-DD HH:MM:SS.SSS 
YYYY-MM-DDTHH:MM 
YYYY-MM-DDTHH:MM:SS 
YYYY-MM-DDTHH:MM:SS.SSS 
HH:MM 
HH:MM:SS 
HH:MM:SS.SSS 
now 
DDDDDDDDDD 

Per maggiori dettagli, date un'occhiata: http://www.sqlite.org/lang_datefunc.html

+0

L'ho provato, ma in questo caso è impossibile effettuare un ordinamento per data –

+0

@KostyaKhuta Prova questo, questo dovrebbe funzionare. Lascia che il tipo PROCESS_DATE sia la data. – Homam

+0

lo proverò ora –

2

Il modo migliore per mettere una data in un database sarebbe utilizzando il valore a lungo di esso. Ho provato a fare quello che stavi facendo e ha avuto un errore simile. Invece di una stringa, inserisci un valore numerico. Può richiedere il valore lungo, che credo sia il valore in millisecondi di qualche tipo. Può quindi essere riconvertito quando lo estrai.

+0

penso a questo proposito, ma quanto mi record verranno trovati in base alla data, e sarà difficile se devo conservare data come valore a lungo. –

+0

È possibile estrarre i valori e controllarli, ma è un po 'inefficiente.Potresti creare un altro tavolo di una sola parte della data, come il giorno, e cercare in quel modo. Un altro problema con il codice potrebbe essere che stai facendo Date.valueOf() invece di memorizzare semplicemente la data. Prova invece. Valueof sta effettivamente restituendo un tipo di dati data mentre il tuo database vuole una stringa. –

+0

è sempre meglio memorizzare il valore lungo nel DB quando si memorizza una data in un database poiché il valore lungo è sempre UTC. Questo ti dà la possibilità di mostrare sempre la data all'utente nel loro fuso orario corrente. –

9

Non è possibile memorizzare la data direttamente in SQLite. Ad esempio, è possibile memorizzare come valore intero:

ContentValues cv = new ContentValues(); 
cv.put(db.PROCESS_DATE, new Date().getTime()); 
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv)); 

In questo caso il vostro campo data deve essere dichiarato come intero:

private static final String DB_PROCESS_CREATE = "create table " 
     + DB_TABLE_PROCESS + "(" + PROCESS_ID 
     + " integer primary key autoincrement, " 
     + PROCESS_DATE + " integer);"; 

Da docs SQLite: SQLite non dispone di un set di classe di memoria a parte per la memorizzazione di date e/o orari. Invece, la data e ora Le funzioni incorporate di SQLite sono in grado di memorizzare date e orari come TEXT, REAL, o valori interi:

  1. TESTO stringhe come ISO8601 ("AAAA-MM-GG HH: MM : SS.SSS ").
  2. REALE come Julian numero di giorni, il numero di giorni da mezzogiorno a Greenwich il 01 novembre24, 4714 a.C. secondo il calendario gregoriano prolettico.
  3. INTEGER come Tempo Unix, il numero di secondi dal 1970-01-01 00:00:00 UTC. Le applicazioni possono scegliere di memorizzare date e orari in uno qualsiasi di questi formati e convertirli liberamente tra i formati utilizzando la data integrata e le funzioni temporali.

Vedi http://www.sqlite.org/datatype3.html

+0

Questa dovrebbe essere la risposta accettata. Vedi: http://stackoverflow.com/a/13694823/3879470 –

Problemi correlati