Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Bug no projeto para download

O projeto para download no quinto item da aula 3 não está salvando alunos, aparece o seguinte erro no console:

table Alunos has no column named caminhoFoto

Eu fiz o download porque tive o mesmo erro no meu projeto, não consegui achar o problema, e pensei em substituí-lo.

4 respostas

Laura, tudo bem ?

Você pode mostrar o seu DAO aqui ?

Tudo sim, e aí? Segue código do AlunoDAO

public class AlunoDAO extends SQLiteOpenHelper {
    public AlunoDAO(Context context) {
        super(context, "Agenda", null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(null,"entrou no create");
        String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, " +
                "nome TEXT NOT NULL, " +
                "endereco TEXT, " +
                "telefone TEXT, " +
                "site TEXT, " +
                "nota REAL, " +
                "caminhoFoto TEXT);";

        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        String sql; 
        switch (oldVersion) {
            case 1:
                sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto TEXT;";
                db.execSQL(sql);
        }
    }

    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * FROM Alunos;";
        SQLiteDatabase db = getReadableDatabase(); 
        Cursor c = db.rawQuery(sql, null); 

        List<Aluno> alunos = new ArrayList<Aluno>();

        while(c.moveToNext()) {
            Aluno aluno = new Aluno(); 
            aluno.setId(c.getLong(c.getColumnIndex("id"))); 
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
            alunos.add(aluno); 
        }
        c.close(); 

        return alunos;
    }

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase(); 

        ContentValues dados = pegaDadosDoAluno(aluno);

        System.out.println("dados:" + dados);

        db.insert("Alunos", null, dados);
    }

    public void deleta(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        String[] params = {aluno.getId().toString()};
        db.delete("Alunos", "id = ?", params);
    }

    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosDoAluno(aluno);
        String[] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }

    @NonNull
    private ContentValues pegaDadosDoAluno(Aluno aluno) {
        ContentValues dados = new ContentValues();
        dados.put("nome", aluno.getNome()); 
        dados.put("endereco", aluno.getEndereco());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());
        dados.put("caminhoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    public boolean alunoExiste(String telefone) {
        SQLiteDatabase db = getReadableDatabase();

        Cursor c = db.rawQuery("SELECT * FROM Alunos WHERE telefone = ?", new String[]{telefone});
        int i = c.getCount();
        c.close();

        return i>0;
    }
}
solução!

o erro diz que não há coluna com o nome caminhoFoto no banco, entretanto o DAO parece estar correto, experimenta desinstalar a agenda e ai executa o app de novo para ele criar novamente o banco

Obrigada Rafael, deu certo =)