package com.example.desenv1.trab2bim.control;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.desenv1.trab2bim.Model.Cidade;
import com.example.desenv1.trab2bim.Model.Cliente;
import com.example.desenv1.trab2bim.Model.Estado;
import com.example.desenv1.trab2bim.banco.SqlitePersistencia;
import java.util.ArrayList;
import java.util.List;
/**
* Created by desenv1 on 29/06/16.
*/
public class ClienteDAO {
private final SqlitePersistencia database;
public ClienteDAO(SqlitePersistencia database) {
this.database = database;
}
public void create(final Cliente cliente){
final SQLiteDatabase writer = this.database.getWritableDatabase();
try {
final ContentValues values = new ContentValues();
values.put("nome", cliente.getNome());
values.put("idade", cliente.getIdade());
values.put("id_estado", cliente.getEstado().getIdEstado());
values.put("id_cidade", cliente.getCidade().getIdCidade());
final Long id2 = writer.insert("estado", null, values);
final Long id = writer.insert("cidade", null, values);
cliente.setIdCliente(id.intValue());
cliente.setIdCliente(id2.intValue());
} finally {
if (writer != null)
writer.close();
}
}
public void edit(final Integer id, final Cliente cliente) {
//Recupera o writer que permite que seja escrito na base de dados
final SQLiteDatabase writer = this.database.getWritableDatabase();
try {
//Para fazer update é precisa setar o valores em contentvalues igual ao insert, porém para este caso ja temos um ID definido
final ContentValues values = new ContentValues();
values.put("nome", cliente.getNome());
values.put("idade", cliente.getIdade());
values.put("id_estado", cliente.getEstado().getIdEstado());
values.put("id_cidade", cliente.getCidade().getIdCidade());
//Faz update do registro na base, porém deve ser um informado uma condição para que não seja feito update em todos os registros por isso é utilizado id_aluno = ? e depois passado como parametro o valor para id
writer.update("cliente", values, "id_cliente = ?", new String[]{cliente.getIdCliente().toString()});
} finally {
//Sempre apos escrever deve ser feito close
if (writer != null)
writer.close();
}
}
/**
* Remove um registro da base de dados
*
* @param cliente
*/
public void remove(final Cliente cliente) {
final SQLiteDatabase writer = this.database.getWritableDatabase();
try {
//Faz o remove de registros da tabela, porém deve ser utilizado um where para não deletar todos os registros, com o where é possivel deletar apenas alguns registros
//id_aluno = ? é uma restrição para que seja deletado apenas alguns registros, apos este é passado um parametro com o valor para o parametro ?
writer.delete("cliente", "id_cliente = ?", new String[]{cliente.getIdCliente().toString()});
} finally {
//Sempre apos escrever deve ser feito close. Delete também é escrever
if (writer != null)
writer.close();
}
}
/**
* Faz uma busca na base de dados buscando todos os registros existentes na tabela aluno
*
* @return
*/
public List<Cliente> get() {
final String sql = "select a.id_cliente idCliente, a.nome nome, a.idade idade, t.id_estado idEstado, t.descricao descricaoEst, t.sigla sigla, t.pais pais, c.id_cidade idCidade, c.descricao descricao from cliente a" +
" inner join estado t on a.id_estado = t.id_estado" +
"inner join cidade c on a.id_cidade = c.id_cidade";
//Recupera o reader da base de dados
final SQLiteDatabase reader = this.database.getReadableDatabase();
Cursor cursor = null;
try {
cursor = reader.rawQuery(sql, null);
final List<Cliente> clientes = new ArrayList<Cliente>();
if (!cursor.moveToFirst()) {
return clientes;
}
do {
clientes.add(readCliente(cursor));
} while (cursor.moveToNext());
return clientes;
} finally {
if (cursor != null)
cursor.close();
reader.close();
}
}
public Cliente get(final Integer id) {
final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_estado idEstado, t.descricao descricaoEst, t.sigla sigla, t.pais pais, c.id_cidade idCidade, c.descricao descricao from cliente a " +
" inner join estado t on a.id_estado = t.id_estado " +
"inner join cidade c on a.id_cidade = c.id_cidade" +
" where a.id_cliente = ?";
final SQLiteDatabase reader = this.database.getReadableDatabase();
Cursor cursor = null;
try {
cursor = reader.rawQuery(sql, new String[]{id.toString()});
if (!cursor.moveToFirst()) {
return null;
}
return readCliente(cursor);
} finally {
if (cursor != null)
cursor.close();
reader.close();
}
}
public List<Cliente> get(final Estado estado) {
final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_estado idEstado from cliente a " +
"inner join estado t on a.id_estado = t.id_estado " +
"where t.id_estado = ?";
final SQLiteDatabase reader = this.database.getReadableDatabase();
Cursor cursor = null;
try {
cursor = reader.rawQuery(sql, new String[]{estado.getIdEstado().toString()});
final List<Cliente> clientes = new ArrayList<Cliente>();
if (!cursor.moveToFirst()) {
return clientes;
}
do {
clientes.add(readCliente(cursor));
} while (cursor.moveToNext());
return clientes;
} finally {
if (cursor != null)
cursor.close();
reader.close();
}
}
public List<Cliente> getCid(final Cidade cidade) {
final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_cidade idCidade from cliente a " +
"inner join cidade t on a.id_cidade = t.id_cidade " +
"where t.id_cidade = ?";
final SQLiteDatabase reader = this.database.getReadableDatabase();
Cursor cursor = null;
try {
cursor = reader.rawQuery(sql, new String[]{cidade.getIdCidade().toString()});
final List<Cliente> clientes = new ArrayList<Cliente>();
if (!cursor.moveToFirst()) {
return clientes;
}
do {
clientes.add(readCliente(cursor));
} while (cursor.moveToNext());
return clientes;
} finally {
if (cursor != null)
cursor.close();
reader.close();
}
}
protected Cliente readCliente(final Cursor cursor) {
Integer columnIndex = cursor.getColumnIndex("idCliente");
final Integer idCliente = cursor.getInt(columnIndex);
columnIndex = cursor.getColumnIndex("nome");
final String nome = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex("idade");
final Integer idade = cursor.getInt(columnIndex);
columnIndex = cursor.getColumnIndex("idEstado");
final Integer idEstado = cursor.getInt(columnIndex);
columnIndex = cursor.getColumnIndex("descricaoEst");
final String descricaoEst = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex("sigla");
final String sigla = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex("pais");
final String pais = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex("idCidade");
final Integer idCidade = cursor.getInt(columnIndex);
columnIndex = cursor.getColumnIndex("descricao");
final String descricao = cursor.getString(columnIndex);
final Estado estado = new Estado(idEstado,descricaoEst, sigla, pais);
final Cidade cidade = new Cidade(idCidade, descricao, estado);
return new Cliente(idCliente,nome, idade, estado, cidade);
}
}
Isso é uma pergunta?
Se não vou sinalizar como impróprio!