Baixe o app para aproveitar ainda mais
Prévia do material em texto
O Guia Definitivo de ANDROID para DBA’s JELSAFÁ RODRIGUES Introdução Olá DBA, E olá também pra você que, como eu, não é um DBA, mas estudando constantemente desenvolvimento. Um dos aspectos mais importantes do Android é o banco de dados, por que quando seu dispositivo está sem internet, você tem que ar- mazenar seus dados em algum lugar, certo? Nesse e-book veremos SQLite e como gerenciar dados em Android. Veremos também dois padrões de desenvolvimento: Factory e DAO (Data Access Object). Bem-vindo ao “Guia Definitivo de Android para DBA’s”! Espero que você aproveite cada uma das páginas. SQLite SQLite é o sistema de gerenciamento de banco de dados utilizado pelo Android para armazenamento de informações. Ele grava os dados num arquivo de texto junto ao aplicativo e recupera as informações quando necessário. O banco de dados é dividido em tabelas, que podem receber os se- guintes tipos de dados: - NULL - Quando o valor é nulo. - INTEGER - Quando o valor um inteiro. - REAL - Quando o valor é um decimal. - TEXT - Quando o valor é um conjunto de caracteres (texto). - BLOB - Quando o valor é boleano, ou seja, 0 ou 1. O gerenciamento do banco de dados é feito através de queries, coman- dos em SQLite que dizem o que deve ser feito no banco. Para criação e exclusão de tabelas usamos as seguintes queries: - CREATE TABLE - Cria a tabela. - DROP TABLE - Deleta a tabela. Para gerenciamento de dados nas tabelas, as seguintes queries podem ser utilizadas: - INSERT - Insere dados na tabela. - UPDATE - Atualiza dados na tabela. - DELETE - Deleta dados da tabela. - SELECT - Seleciona dados da tabela. Factory Toda aplicação precisa de um método de conexão com o banco de da- dos para estabelecer uma comunicação estável. O método mais recomendável é o padrão Factory. O padrão Factory define uma interface de criação de um objeto, mas deixa subclasses definirem qual classe instanciar. A classe Factory implementará a interface SQLiteOpenHelper, que irá implementar um construtor padrão e os métodos onCreate e onUp- grade. Na próxima página, criaremos uma ConnectionFactory classe que im- plementará a criação e atualização das tabelas do banco de dados. No exemplo abaixo, existe um construtor onde será determinado o nome e a versão do banco, o método onCreate onde as tabelas usuário e log serão criadas e o método onUpgrade onde as tabelas usuário e log serão deletadas e recriadas, se a versão atual for maior que a antiga. public class ConnectionFactory extends SQLiteOpenHelper{ private final String NomeBanco = “banco_local”; private final int VersaoBanco = 1; public ConnectionFactory(Context context){ super(context, NomeBanco, null, VersaoBanco); this.context = context; } public void onCreate(SQLiteDatabase database){ UsuarioDAO usuarioDAO = new UsuarioDAO(context); usuarioDAO.create(database); LogDAO logDAO = new LogDAO(context); logDAO.create(database); } public void onUpgrade(SQLiteDatabase database, int old, int new){ if(new > old){ UsuarioDAO usuarioDAO = new UsuarioDAO(context); usuarioDAO.drop(database); LogDAO logDAO = new LogDAO(context); logDAO.drop(database); onCreate(database); } } } O Guia Definitivo de Android pra DBA’s public class Usuario{ private int id; private String nome; private String senha; public Usuario(int id, String nome, String senha){ this.id = id; this.nome = nome; this.senha = senha; } public int getId(){ return this.id; } public void setId(int valor){ this.id = valor; } public String getNome(){ return this.nome; } public void setNome(String valor){ this.nome = valor; } public String getSenha(){ return this.senha; } public void setSenha (String valor){ this.senha = valor; } } O Guia Definitivo de Android pra DBA’s O Guia Definitivo de Android pra DBA’s public class Log{ private int id; private String data; private Usuario usuario; public Usuario(int id, Date data, Usuario usuario){ this.id = id; setData(data); this.usuario = usuario; } public int getId(){ return this.id; } public void setId(int valor){ this.id = valor; } public String getData(){ return this.data; } public void setData(Date valor){ SimpleDateFormat dateFormat = new SimpleDateFormat( “yyyy-MM-dd HH:mm:ss”, Locale.getDefault()); this.data = dateFormat.format(valor); } public Usuario getUsuario(){ return this.usuario; } public void setUsuario(Usuario valor){ this.usuario = valor; } } SQLite Queries A comunicação com o banco de dados é feito através de queries. Abaixo, alguns exemplos com queries básicas: Para criação de tabela CREATE TABLE usuario (id INTEGER PRIMARY KEY AUTOIN- CREMENT, nome TEXT, senha TEXT); Para deleção de tabela DROP TABLE usuario IF EXISTS; Para inserção de dados INSERT INTO usuario (id, nome, senha) values (1, “João da Silva“, “123456789“); Para atualização de dados UPDATE usuario SET nome = “João da Silva Pereira“, senha = “123456789“ WHERE id = 1; Para deleção de dados DELETE FROM usuario WHERE id = 1; Para seleção de dados SELECT * FROM usuario; DAO Nas próximas páginas implementaremos a classe UsuarioDAO, que irá executar as queries e gerenciar os dados da tabela usuario. public class UsuarioDAO{ ConnectionFactory db; Context context; public UsuarioDAO(Context context){ this.context = context; this.db = new ConnectionFactory(context); } public void create(SQLiteDatabase database){ String query = “CREATE TABLE usuario (”+ “id INTEGER PRIMARY KEY AUTOINCREMENT, “+ “nome TEXT, “+ “senha TEXT)”; database.execSQL(query); } public void drop(SQLiteDatabase database){ String query = “DROP TABLE IF EXISTS usuario;”; database.execSQL(query); } public void insert(Usuario usuario){ SQLiteDatabase database = this.db.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(“id”, usuario.getId()); values.put(“nome”, usuario.getNome()); values.put(“senha”, usuario.getSenha()); database.insert(“usuario”, null, values); database.close(); } public void update(Usuario usuario){ SQLiteDatabase database = this.db.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(“id”, usuario.getId()); values.put(“nome”, usuario.getNome()); values.put(“senha”, usuario.getSenha()); return db.update(“usuario”, values, “id=?”, new String[] { String.valueOf(usuario.getId()) }); } O Guia Definitivo de Android pra DBA’s public Usuario get(int id){ Usuario usuario = new Usuario(); String query = “SELECT id, nome, senha FROM usuario WHERE id = ”+id; SQLiteDatabase database = this.db.getWritableDatabase(); Cursor cursor = database.rawQuery(query, null); if(cursor.moveToFirst()){ usuario.setId(cursor.getInt(0)); usuario.setNome(cursor.getString(1)); usuario.setSenha(cursor.getString(2)); } databse.close(); return usuario; } public Usuario list(){ ArrayList<Usuario> list = new ArrayList<Usuario>(); String query = “SELECT id, nome, senha FROM usuario;”; SQLiteDatabase database = this.db.getWritableDatabase(); Cursor cursor = database.rawQuery(query, null); if(cursor.moveToFirst()){ do{ Usuario usuario = new Usuario(); usuario.setId(cursor.getInt(0)); usuario.setNome(cursor.getString(1)); usuario.setSenha(cursor.getString(2)); list.add(usuario); } while(cursor.moveToNext()); } database.close(); return list; } } O Guia Definitivo de Android pra DBA’s Nas próximas páginas implementaremos a classe LogDAO, que irá executar as queries e gerenciar os dados da tabela log.public class LogDAO{ ConnectionFactory db; Context context; public LogDAO(Context context){ this.context = context; this.db = new ConnectionFactory(context); } public void create(SQLiteDatabase database){ String query = “CREATE TABLE log (”+ “id INTEGER PRIMARY KEY AUTOINCREMENT, “+ “data DATETIME DEFAULT CURRENT_TIMESTAMP, “+ “usuario INTEGER)”; database.execSQL(query); } public void drop(SQLiteDatabase database){ String query = “DROP TABLE IF EXISTS log;”; database.execSQL(query); } O Guia Definitivo de Android pra DBA’s O Guia Definitivo de Android pra DBA’s public void insert(Log log){ SQLiteDatabase database = this.db.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(“id”, log.getId()); values.put(“data”, log.getNome()); values.put(“usuario”, log.getUsuario().getId()); database.insert(“log”, null, values); database.close(); } public void update(Log log){ SQLiteDatabase database = this.db.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(“id”, log.getId()); values.put(“data”, log.getNome()); values.put(“usuario”, log.getUsuario().getId()); return db.update(“log”, values, “id=?”, new String[] { String.valueOf(log.getId()) }); } O Guia Definitivo de Android pra DBA’s public Log get(int id){ Log log = new Log(); String query = “SELECT id, data, usuario FROM log WHERE id = ”+id; SQLiteDatabase database = this.db.getWritableDatabase(); Cursor cursor = database.rawQuery(query, null); if(cursor.moveToFirst()){ log.setId(cursor.getInt(0)); log.setData(cursor.getString(1)); log.setSenha(cursor.getString(2)); } databse.close(); return usuario; } public Usuario list(){ ArrayList<Usuario> list = new ArrayList<Usuario>(); String query = “SELECT id, nome, senha FROM usuario;”; SQLiteDatabase database = this.db.getWritableDatabase(); Cursor cursor = database.rawQuery(query, null); if(cursor.moveToFirst()){ do{ Usuario usuario = new Usuario(); usuario.setId(cursor.getInt(0)); usuario.setNome(cursor.getString(1)); usuario.setSenha(cursor.getString(2)); list.add(usuario); } while(cursor.moveToNext()); } databse.close(); return list; } } Desenvolvedor de sistemas desde os 16 anos, Jelsafá Rodrigues tem participado do desenvolvido sistemas web e mobile para grandes empresas brasileiras e internacionais. Apaixonado por podcasts, programação e empreendedorismo, ele acredita que trabalho duro e foco são as chaves para o sucesso.
Compartilhar