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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software