E aí pessoal! Beleza?
Não estou conseguindo fazer consultas com datas no sqlite, estou salvando nesse string no formato dd/MM/yyyy. Será que tem algum problema?
obs: código abaixo.
Banco
String sqlHistoricoPag = “CREATE TABLE " + TABELA_HISTORICO_PAGAMENTOS + " (”
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "vencimento TEXT, "
+ "dataBaixa TEXT, "
+ "documento TEXT, "
+ "historico TEXT, "
+ "origem TEXT, "
+ "valor TEXT, "
+ "desconto TEXT, "
+ "multa TEXT, "
+ "juros TEXT, "
+ "valorTotal TEXT, "
+ "descricao TEXT, "
+ “valorItem TEXT”
+ “);”;
db.execSQL(sqlHistoricoPag);
Consulta
public List getListaTeste() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(
“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = 15/03/2017”,
null);
List<HistoricoPagamentos> lista = new ArrayList<HistoricoPagamentos>();
while (cursor.moveToNext()) {
HistoricoPagamentos h = new HistoricoPagamentos();
h.setVencimento(cursor.getString(cursor.getColumnIndex("vencimento")));
h.setDataBaixa(cursor.getString(cursor.getColumnIndex("dataBaixa")));
h.setDocumento(cursor.getString(cursor.getColumnIndex("documento")));
h.setHistorico(cursor.getString(cursor.getColumnIndex("historico")));
h.setOrigem(cursor.getString(cursor.getColumnIndex("origem")));
h.setValor(cursor.getString(cursor.getColumnIndex("valor")));
h.setDesconto(cursor.getString(cursor.getColumnIndex("desconto")));
h.setMulta(cursor.getString(cursor.getColumnIndex("multa")));
h.setJuros(cursor.getString(cursor.getColumnIndex("juros")));
h.setValorTotal(cursor.getString(cursor.getColumnIndex("valorTotal")));
h.setDescricao(cursor.getString(cursor.getColumnIndex("descricao")));
h.setValorItem(cursor.getString(cursor.getColumnIndex("valorItem")));
lista.add(h);
}
return lista;
}
Nessa consulta o retorno é igual a nada
Primeiro, por que colocar datas como string no banco de dados se existem tipos que aceitam datas, horas e datas com horas?
Segundo, quando você deseja comparar duas strings, precisa colocar o valor a ser comparado entre aspas simples ...WHERE colunaQueTemString = 'valorEntreAspasSimples' AND ...
1 curtida
Bom dia drsmachado!
1 - Então, o WebService retorna desse jeito e eu só estou repassando colocando o mesmo tipo de dados. Mas se tiver alguma sugestão de como melhorar, por favor, me fale
2 - Deu certo só com a primeira data, por exemplo:
“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = ‘07/11/2016’”
Se eu colocar dessa forma:
“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = ‘07/11/2016’ AND ‘07/12/2016’”
A consulta até me retorna as datas, mas só as de 07/11/2016
Esse seu select não vai funcionar, por que você está usando o operador AND, ou seja, não existe nenhum histórico que atenda a regra da consulta, pois não existe nenhum pagamento com a dataBaixa = 07/11/2016 “E” 07/12/2016, ou seja a dataBaixa teria que ter as duas datas juntas em um único registro para que fosse possível recupera-la.
monte o seu select usando o operador OR, isso já deve resolver o seu problema, pois assim a consulta buscará registros que possuam a data de baixa em 07/11/2016 OU 07/12/2016.
"SELECT * FROM"+ TABELA_HISTORICO_PAGAMENTOS +"WHERE dataBaixa = '07/11/2016' OR dataBaixa = '07/12/2016'"
1 curtida
Valeu Jonathan deu certo!
Se eu quiser fazer consultar pra trazer as datas das baixas dos últimos três meses?
Vou ter que usar a consulta desse jeito?
“SELECT * FROM”+ TABELA_HISTORICO_PAGAMENTOS +“WHERE dataBaixa = ‘07/11/2016’ OR dataBaixa = ‘07/12/2016’ OR dataBaixa = '07/10/2016”
Últimos 6 meses:
“SELECT * FROM”+ TABELA_HISTORICO_PAGAMENTOS +“WHERE dataBaixa = ‘07/11/2016’ OR dataBaixa = ‘07/12/2016’ OR dataBaixa = '07/10/2016 OR …”
Será que não tem uma consulta com menos códigos?
Nesse caso já não convém utilizar comparação por datas desta maneira, já seria viável a utilização do BETWEEN
Exemplo:
"SELECT * FROM"+ TABELA_HISTORICO_PAGAMENTOS +"WHERE dataBaixa BETWEEN '07/10/2016' AND '07/12/2016"
O comando BETWEEN
é bem simples, ele busca todos os registros entre um intervalo de datas, como te mostrei no exemplo acima, o que ele está fazendo é nada mais nada menos do que buscando pra mim o histórico de pagamentos onde a dataBaixa está entre 07/10/2016 e 07/12/2016.
Valeu Jonathan! Deu certo