Erro na sintaxe do SQLite?

Fiquei alguns anos sem programar e retornei agora cheio das duvidas, enfim, esta retornando um erro no método que recebe uma String (no caso o nome do cão que se chama Uhtred) e retorna o resultado da pesquisa do banco de dados.

Método:

public DadosCaes consultaNome(String nome) {
    DadosCaes dadosCao = new DadosCaes();
    Cursor cursor;
    String[] campos = {bco.NOME_CAO,banco.RACA_CAO,banco.DATA_NASCIMENTO};
    db = banco.getReadableDatabase();
    String where = banco.NOME_CAO + " = " + nome;
    cursor = db.query(banco.TABELA,campos, where, null, null,null,null,null);
    if (cursor != null){
        if(cursor.moveToFirst()){
            dadosCao.setNOME_CAO(cursor.getString(0));
            dadosCao.setRACA_CAO(cursor.getString(1));
            dadosCao.setDATA_NASCIMENTO(cursor.getString(2));
        }
    }
    return dadosCao;
}

O erro:

android.database.sqlite.SQLiteException: no such column: Uhtred (code 1): , while compiling: SELECT nome_cao, raca_cao, data_nascimento FROM caes WHERE nome_cao = Uhtred

1 curtida

Geralmente para colunas do tipo texto se usa o operador LIKE e não =

Já tentou algo como:

WHERE nome_cao LIKE 'Uhtred'

E também, para colunas do tipo texto o valor de comparação deve estar contido entre apóstrofos, mais conhecidos como as famosas “aspas simples”.

1 curtida

Há um erro na string bco.nome e deve-se usar o like o = não pode estar ente aspas.

Na verdade o = funciona SIM, o LIKE é para a busca parcial. Ex:
WHERE nome_cao LIKE ‘Uh%’
no exemplo acima iria buscar por nomes iniciados em Uh

ja se vc usar WHERE nome_cao = ‘Uhtred’ o nome do cão
deve estar EXATAMENTE assim ‘Uhtred’

o que vc esqueceu em sua instrução SQL foi as aspas simples
escreva ‘Uhtred’ e não apenas Uhtred

forte abraço!

A busca parcial é ativada utilizando o caracter % no início, fim ou ambas as pontas da String desejada, no caso em que o mesmo é omitido a busca é feita pelo valor exato e não mais parcial.

foi exatamente o que eu disse na minha resposta. Então vc insite que o sinal de igual nao funciona ? que deve ser usado o LIKE ???
entao tá né ? trabalho ha apenas 23 anos com isso… posso estar errado… :smile:

Tente assim:

String where = banco.NOME_CAO + " = '" + nome + "'";

Eu não disse que não funciona, e muito menos que deve ser usado o like, eu sugeri o uso do like, releia a resposta que escrevi anteriormente pois sua interpretação está muito equivocada!
Não estou questionando seu conhecimento, muito menos à quanto tempo trabalha com isso, o intuíto aqui é ajudar e não dizer quem está certo/errado.

Abraço!