sexta-feira, junho 03, 2011

Column does not exist

HI,

Mais uma surra no Android. Levei algumas horas para descobrir o erro. Não tinha procurado no google, por que eu achava que eu tava informando errado o nome do campo, ou que estava pegando a variável da tabela expenses.

Resolvi criar uma tabela no exemplo de estudo para armazenar as categorias das despesas. Criei com os campos idcat e desccat. Criei as classes para manipular a tabela, tudo indo ok, tava inserindo. Mas quando chegou na hora de listar as categorias na tela, deu o seguinte erro: java.lang.IllegalArgumentException: column '_id' does not exist.

O que me confundiu, é que na tabela de expenses, existe esse campo. Pensei que tava misturando os código, etc. Depois de um monte de tentativas, de alterações no código, de criar os log para saber o que estava acontecendo ( no log mostrava o nome certo da variável idcat ). Resolvi pesquisar no google pela mensagem de erro: java.lang.IllegalArgumentException column does not exist . No resultado vi um monte de _id. Achei estranho. Um monte de gente faltando esse campo.

Foi aí que descobrir entrando nas páginas, que usando o SimpleCursorAdapter, é obrigatório ter uma campo único com o nome _id, hehehe. Pensei que ia ter que mudar o nome do campo, de idcat para _id, mas eu vi uma dica de mudar o nome do campo no select, ficando assim: select idcat as _id, desccat from categories.

Mas para executar essa query é preciso usar o rawQuery no lugar do query.

Ficou assim o código:

public Cursor allCategories(){
return mDb.rawQuery("select idcat as _id, namecategory from " + DB_TABLE_CATEGORIES, null);
}

e criei mais uma variável para representar esse campo:

public static final String KEY_CAT_ID = "idcat";
public static final String KEY_CAT_ROWID = "_id";
public static final String KEY_CAT_DESCRIPTION = "namecategory";


é isso aí, espero que possa ser útil.

links que achei




Fiquem na Paz!!!!

Nenhum comentário: