Bom galera, estou com uma aplicacao que criei o banco de dados no SQLite e joguei dentro da pasta database da aplicacao em File explorer, e ao executar a aplicacao retorna esse erro
No such table carro
...
Unable to start activity ComponentInfo
O nome da tabela esta correto, nao aparenta ter algo errado,passo esse comando para acessar o BD
protected SQLiteDatabase db;
public RepositorioCarro(Context ctx){
// Abre o banco de dados ja existente
db = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
}
e olhando os logs ele aponta para essa linha do codigo
public List<Carro> listarCarros(){
Cursor c = getCursor();
List<Carro> carros = new ArrayList<Carro>();
if(c.moveToFirst()){ <--------------------------------- Bem aqui no if
// Recupera os indices das colunas
int idxId = c.getColumnIndex(Carros._ID);
int idxNome = c.getColumnIndex(Carros.NOME);
int idxPlaca = c.getColumnIndex(Carros.PLACA);
int idXAno = c.getColumnIndex(Carros.ANO);
// Loop ate o final
do {
Carro carro = new Carro();
carros.add(carro);
// Recupera os atributos de carro
carro.id = c.getLong(idxId);
carro.nome = c.getString(idxNome);
carro.placa = c.getString(idxPlaca);
carro.ano = c.getInt(idXAno);
}while(c.moveToNext());
}
return carros;
}
Dei uma olhada pela internet sobre erro nao achei nada que pudesse solucionar o erro, muito falam para criar o BD dentro da app… Alguém saberia o que pode ser?
Abraço
Sim o erro indica isso, mas ela existe e o nome está correto, e o BD dentro da pasta databases certinho. Eu notei que se tento executar a aplicação no emulador com o SQLite aberto ele dá o erro da forma como postei, caso o SQLite esteja fechado não aparece o tal such table apenas o “Unable to start activity conponentInfo”… É normal isso? O que pode ser?
Mesmo com o sqlite fechado ele deu na primeira linha do LogCat o “such table” segue o erro
Erro ao buscar os carros: android.database.sqlite.SQLException no such table : carro: while compiling SELECT _id,nome,plcaca ,ano FROM carro
Esse Log é mandado escrever nessa parte do codigo
// Retorna um cursor com todos os carros
public Cursor getCursor(){
try{
// select * from carros
return db.query(NOME_TABELA, Carro.colunas, null, null, null, null, null, null);
}catch(SQLException e){
Log.e(CATEGORIA,"Erro ao buscar os carros: "+e.toString());
return null;
}
}
Depois desse log vem a parte do Unable to start activity … NullPointerException
Que aponta na linha mencionada no outro post.
A primeira coisa que devemos fazer como programadores é não brigar com os fatos: se está dando a mensagem no such table, é que não existe a tal tabela, pode ser erro de digitação, nome errado, plural, singular, diretório errado, etc. Mas, tem uma inconsistência aí! Procura.
Concordo plenamente com o que diz, o mais provável seria um erro de diretório então, coloquei o banco em file explorer > data > data > (nome da aplicacao) > databases
[quote=A H Gusukuma]Com o emulador aberto, em linha de comando:
adb -s emulator-5554 shell
sqlite3 /data/data/seu package/databases/seudb
select * from carro;
[/quote]
Até a parte do comando sqlite3 /data/data/seu package/databases/seudb foi sem problemas, ao inserir o select ele gerou o erro unable to open database file, ou seja não encontrou a tabela!!!
Era o que estava pensando em fazer já que não funcionou, até cheguei a criar outras tabelas para usar, mas obtive o mesmo erro. Farei isso então. Muito obrigado por se dispor a ajudar!