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

Estou com dúvida no curso de Android: Aplicações e armazenamento de dados - Parte 1, no exercício do capítulo Persistência com SQLite.

//Minha Dúvida nessa questão é se o código DDL deve ficar no DAO ou no SQL Helper

public class AlunoDao { 
    private static final String DATABASE = "CadastroCaelum";
    private static final int VERSAO = 1;
    private SqlHelper DaoSQLHelper;

    public AlunoDao(Context context) {

        this.DaoSQLHelper = new SqlHelper(context, DATABASE, null, VERSAO);
        this.DaoSQLHelper.setDdlCreateString( "CREATE TABLE Aluno (id INTEGER PRIMARY KEY, nome TEXT UNIQUE NOT NULL, "
                + "telefone TEXT, endereco TEXT, site TEXT, nota REAL, foto TEXT);");

        this.DaoSQLHelper.setDdlUpgradeString("DROP TABLE IF EXISTS Aluno;");
    }




    public void insere(Aluno aluno){
        ContentValues values = toValues(aluno);
        this.DaoSQLHelper.getWritableDatabase().insert("Aluno", null, values);
        this.DaoSQLHelper.close();

    }

    private ContentValues toValues(Aluno aluno) {
        ContentValues values = new ContentValues();
        values.put("nome", aluno.getNome());
        values.put("nota", aluno.getNota());
        values.put("telefone", aluno.getTelefone());
        values.put("endereco", aluno.getEndereco());
        values.put("site", aluno.getSite());
        values.put("nota", aluno.getNota());
        return values;
    }    

//Criei essa classe para ser um atributo do DAO
public class SqlHelper extends SQLiteOpenHelper {
    private String ddlCreateString;
    private String ddlUpgradeString;

    public SqlHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }


    public void setDdlCreateString(String ddlCreateString) {
        this.ddlCreateString = ddlCreateString;
    }


    public void setDdlUpgradeString(String ddlUpgradeString) {
        this.ddlUpgradeString = ddlUpgradeString;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(ddlCreateString);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(ddlUpgradeString);
        this.onCreate(db);

    }

}
2 respostas

Bom dia Eriko!

As instruções de manipulação de estrutura do banco de dados acredito que deve ser feito apenas no Helper (classe onde fará a conexão com o banco). Já as instruções de CRUD na DAO.

O que foi ensinado na aula é uma forma bem simples para aprender como funciona a persistência no banco. Achei muito boa a aula por causa disso!

Mas existe boas práticas para fazer isso de acordo com o tutorial da própria Google: http://developer.android.com/training/basics/data-storage/databases.html

Abraços.

solução!

Olá Ériko, tudo bem?

O ideal é definir bem as responsabilidades de cada classe. Para trabalhar com o banco de dados, temos uma classe da qual devemos herdar: SQLiteOpenHelper. É ela quem cuidará para nós da inserção, da busca, etc (DML) e também da criação (DDL). Ou seja, da infraestrutura necessária para nós utilizarmos o SQLite. Portanto, faz sentido que coloquemos nossa query de criação, que é um código de infraestrutura, dentro desta classe. Que já é responsável por isso!

Já o DAO, é um padrão de projeto que nós utilizamos isolar da camada de negócio, a complexidade do acesso a dados (no nosso caso, do banco de dados). Mas onde se encontra essa complexidade? Na infraestrutura! Ou seja, na nossa classe filha de SQLiteOpenHelper.

Tudo bem?

Forte abraço!