Select retorna nada

Estou tentando fazer uma consulta para buscar os registros do úlitmo mês, mas infelizmente não esta dando certo, e não sei o porquê.

Código abaixo.

String dataInicio = "17/02/2017";
String dataFinal = "17/03/2017";
public List<HistoricoPagamentos> getListaHistoricoPagamentosUltimoMes(String dataInicio, String dataFinal) {
     SQLiteDatabase db = this.getReadableDatabase();
     Cursor cursor = db.rawQuery(
             "SELECT * FROM "+ TABELA_HISTORICO_PAGAMENTOS +" WHERE vencimento BETWEEN ? AND ?",
             new String[]{dataInicio, dataFinal});

     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;
 }

Nesse caso, era pra trazer apenas um registro do dia 10/03/2017. Mas não está retornando.

Aqui ele converte as datas para o formato de Date do banco automaticamente?

Estou perguntando porque no caso de usos de consultas usando Statement é necessário converter para o formato manualmente.

Nunca usei o método db.rawQuery.

Não, nessa parte do código ele não converte para o formato de Date do banco. Essa parte é do whereArgs.

E onde ta isso? Ja ta convertido nesse momento?

Não entendi muito a pergunta, mas não estou convertendo para o formato do banco YYYY-MM-DD, porque estou salvando as datas no formato dd/MM/yyyy e com o tipo de dados String. Por isso eu ACHO que não tem problema se eu informar com o tipo de dados String no formato dd/MM/yyyy.
Eu queria saber se tem problema ou não fazer isso e se vou ter que mudar o formato que estou salvando no banco, que atualmente as datas do meu estão sendo salva como string e no formato dd/MM/yyyy.

Talvez o between não esteja funcionando pelo fato do tipo de dado do banco ser String e não Date ou DateTime.

1 curtida

Agora estou tentando passar para Date deu erro:

for(int i = 0; i < vencimento2.length; i++){
try{
vencimento3[i] = Date.parse(vencimento2[i]);
} catch (ParseException e){
e.printStackTrace();
}
}

O erro mostra que o método Date.parse retorna um long e o vencimento3 é do tipo data

Deu certo aqui, eu tive que formatar para o formato do banco YYYY-MM-DD, dessa forma ele reconhece que é uma data e consegue retornar a consulta que eu quero

1 curtida