W Androidzie mamy dostępną wbudowaną relacyjną baze danych – SqLite. Jak można wnioskować po nazwie, ta baza danych jest trochę okrojona w porównaniu do baz takich jak Oracle, Sybase czy PostgreSQL.
Dostępne typy danych w SqlLite to:
- INTEGER – służy do przechowywania liczb całkowitych; w zależności od wielkości wartości przechowywane są na 1, 2, 3, 4, 6 lub 8 bitach
- REAL – liczby zmiennoprzecinkowe
- TEXT- ciągi znaków
- BLOB – dane binarne
Jak widać nie ma tego za wiele, ale wystarczająco, aby zapewnić nam wszystko czego potrzebujemy. Przynajmniej w większości wypadków
Chociaż po chwili zastanowienia… gdzie jest typ Date? Jak zapisywać datę? Tyle pytań bez odpowiedzi… Aż do teraz!
Data może być przechowywana w bazie danych w jednym z trzech formatów:
- TEXT – data jest zapisana w formacie ISO8601, czyli „YYYY-MM-DD HH:MM:SS.SSS”
- REAL – data jest zapisana jako liczba dni, które mineły od 24 listopada 4714 r. p.n.e., czyli tak zwana data Juliańska
- INTEGER – czas UNIXowy, czyli liczba milisekund, które mineły od 1 stycznia 1970r.
Do operacji na datach SqLite dostarcza 5 metod:
- date(timestring, …)
- time(timestring, …)
- datetime(timestring, …)
- julianday(timestring, …)
- strftime(format, timestring, …)
Pierwsze 4 funkcje przyjmują string jako pierwszy argument, a następnie dodatkowe argumenty. Funckja strftime przyjmuje jako pierwszy argument format daty, następnie wartość daty jako string oraz dodatkowe argumenty jako kolejne argumenty.
String opisujący date może być w jednym z poniższych formatów:
- 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
Formaty od 1 do 4 wydają się być oczywiste. W formatach 5-7 występuję stały znak T, który służy jako separator daty i godziny. Formaty 8-10 służą do przechowywania samej godziny. Format 11 to string now, który odpowiada aktualnej dacie. Ostatni format jest to liczba zmiennoprzecinkowa opisująca date Juliańską.