Guardar data no SQLite

3,370 views
Skip to first unread message

Júlio Cesar Bueno Cotta

unread,
Jul 19, 2011, 9:58:55 AM7/19/11
to androidb...@googlegroups.com
opa, tudo bom?
Estou querendo tirar uma duvida com vocês aqui pessoal...

Tem algum problema guardar um Date no SQLite como Integer?
Na hora de criar "COLUNA_DATA  INTEGER NOT NULL "

Na hora de inserir:

        ContentValues values = new ContentValues();
        values.put(COLUNA_DATA, visita.getData().getTime());

Na hora de recuperar:

visita.setData(new Date(c.getInt(c.getColumnIndex(COLUNA_DATA))));

Acredito que não haja problemas com relação a ordenação das datas caso eu queira fazer um order by, pois getTime() me retorna um valor em milissegundos daquela data..então quanto mais novo o Date..maior seu valor.

Se alguém achar algum problema com essa ideia..me dê um toque.

Obrigado!
--
Júlio Cesar Bueno Cotta
Bacharel em Ciência da Computação pela UFV
Mestrando em Ciência da Computação pela UFABC

Ivan hydeo

unread,
Jul 19, 2011, 10:22:35 AM7/19/11
to androidb...@googlegroups.com
mas vc consegue retornar a data de um formato int ??

digo vc deve ta re-organizando em alguma parte do seu codigo n ??

tipo separando dia / mes / ano, tirando do int salvo

n fica estranho ?

n eh mais pratico vc salvar como date na tabela ?

Júlio Cesar Bueno Cotta

unread,
Jul 19, 2011, 10:28:28 AM7/19/11
to androidb...@googlegroups.com
Com base no valor do banco eu posso criar um Date:
visita.setData(new Date(c.getInt(c.getColumnIndex(COLUNA_DATA))));

é so pegar o valor em milissegundos e passar para o construtor de um Date, sendo que isso é feito na mesma classe que guarda no banco.então está encapsulado. :-P

Guardar um Integer é moleza..vc já tentou guardar/recuperar um Date no SQLite?
Abraço

Diego Rocha

unread,
Jul 19, 2011, 10:30:47 AM7/19/11
to androidb...@googlegroups.com
Ivan,



Acho que depende do uso daquele campo.

Como o SQLite não tem um tipo DateTime, ele "simula" isso utilizando um int, real ou text.
http://www.sqlite.org/datatype3.html


Se o campo for usado para subtrações soma e etc (ver idade, quantos dias entre data x e data y) guardar em int pode ser uma boa, mais prático de programar e evita o trabalho de "converter em int". Porém se o uso for para exibir uma data mesmo (um compromisso na agenda) guardar em datetime deve ser mais prático e estético.


Atenciosamente,
Diego Rocha

Dirlei Dionísio

unread,
Jul 19, 2011, 10:34:06 AM7/19/11
to androidb...@googlegroups.com
Eu considero uma boa prática guardar datas no Sqlite como strings no formato yyyy-mm-dd. Se precisar acrescentar hora, adicione hh:mm:ss.zzz. Isso facilita as pesquisas e também ajuda a identificar o conteúdo do campo com um simples select.

[]'s

Em 19 de julho de 2011 11:22, Ivan hydeo <kaitoku...@gmail.com> escreveu:



--

Dirlei Dionísio

Novo artigo: Foque nos usuários, não nas funcionalidades

Diego Rocha

unread,
Jul 19, 2011, 10:42:10 AM7/19/11
to androidb...@googlegroups.com
Dirlei,

Eu costumo trabalhar assim também, mas em casos específicos uso int, principalmente se for uma tabela que vai ter muitos registros, muitos mesmo (não em SQLite, mas já trabalhei com tabelas de 2 milhões de registros), uma string
"yyyy-mm-dd" tem 10 bytes, "yyyy-mm-dd hh:mm:ss.zzz" tem 23 bytes, um int64 tem 8 bytes, essa economia é pouca, mas em escala fica considerável.
Acho que não existe regra, cada situação é uma situação, e eu costumo prefirir a de melhor permomance.

Atenciosamente,
Diego Rocha

Júlio Cesar Bueno Cotta

unread,
Jul 19, 2011, 11:13:23 AM7/19/11
to androidb...@googlegroups.com
Pessoal, obrigado pelas opiniões!
Acho que vou manter como Integer mesmo.
Abraço a todos!

Ivan hydeo

unread,
Jul 19, 2011, 11:24:02 AM7/19/11
to androidb...@googlegroups.com
legal os metodos de trabalho com o date, n tinha pensando em tipo dependendo da situaçao compença mais vc usar o int, no caso q o Diego descreveu por exemplo, por motivos de performance

Diego vlw pelo link vou favoritar ele aki para consultas futuras
Reply all
Reply to author
Forward
0 new messages