DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite II (OUTROS MÉTODOS PARA O NOSSO CRUD.).
01/04/2011 16 Comentários
Tendo a estrutura do nosso esquema criado, vamos criar outros métodos no nosso DAO que será necessário para “fecharmos” nosso CRUD de Pessoa.
O estilo é bastante semelhante com o JDBC do Java, ou seja, teremos que converter manualmente um objeto na estrutura da tabela. Com uma diferença, não será preciso escrever a query em si, os métodos do SQLiteDatabase já as encapsula. Apenas temos que cuidar dos parâmetros que passaremos pra eles.
Um objeto SQLiteDatabase já tem pronto o método insert, que recebe o nome da tabela. Assim, para inserir um novo registro no BD, não precisamos do SQL, basta usar o método que o SQL será gerado automaticamente. Segue o exemplo do método inserir na nossa classe PessoaDAO:
public void inserir(Pessoa pessoa){ ContentValues valores = new ContentValues(); valores.put("nome", pessoa.getNome()); valores.put("site", pessoa.getSite()); valores.put("foto", pessoa.getFoto()); valores.put("telefone", pessoa.getTelefone()); valores.put("endereco", pessoa.getEndereco()); getWritableDatabase().insert(TABELA, null, valores); }
Tendo o nosso “C” do CRUD em ordem, vamos para a listagem das pessoas cadastradas no banco. Para buscar todas as pessoas teremos que lidar com o objeto Cursor, fazendo um paralelo com o jdbc, se trata de um primo do ResultSet.
E da mesma forma do insert, contamos o método query que nos dá mais liberdade nas buscas(liberdade = maior número de parâmetros :)).
Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
Os outros parâmetros que deixamos em branco nos permite fazer select, groupBy, having, sortBy, por ai vai. É só explorar a API para ganhar prática nesses parâmetros.
Similarmente ao ResultSet, tendo o resultado da busca em um Cursor, bastamos iterar sobre suas linhas preenchendo o objeto Pessoa.
public List<Pessoa> getLista(){ Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null); List<Pessoa> lista = new ArrayList<Pessoa>(); while(c.moveToNext()){ Pessoa pessoa = new Pessoa(); pessoa.setId(c.getInt(0)); pessoa.setNome(c.getString(1)); pessoa.setTelefone(c.getString(2)); pessoa.setEndereco(c.getString(3)); pessoa.setSite(c.getString(4)); pessoa.setFoto(c.getString(5)); lista .add(pessoa); } c.close(); return lista; }
A app do nosso crud ganhando corpo..
É isso galera, agora é dar uma olhada nas coisas da Faculdade porque a “boca é quente”.
nose porque en el metodo
Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null,null);
me marce error en la COLUNAS,
como se debe definir????
COLUNAS deve ser um array de String com os nomes das colunas que faz parte do BD. Por exemplo: private static final String[] COLUNAS = {“id”, “nome”};
muito obrigado pela sua resposta rápida …. Estou tentando importar um banco de dados SQLite Gestor para evitar o trabalho de criação de tabelas com SQL em Java.
Eu segui este tutorial,
http://blog.findemor.es/2011/02/como-programar-en-android-guia-5/
somente quando tento consultar o log, eu recebo o seguinte:
caused by:android.databases.sqlite.SQLIteException no such table; clientee , while compiling SELECT * FROM
já tentou isso?
ou pode adaptar o seu código para inserir e consulta para fazer outras mais mesas dentro do banco de dados?
muito obrigado
como puedo ir insertando mas filas a la base de datos sin que se borre las que ya estan?
Tipo por demanda?
O meu fica dando nullpointerexception, tem ideia do que pode ser ?
Cara, so vc mandando o codigo.. De lata eh dificil saber..
Cara, o meu esta chamando o seguinte erro:
ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively
cara to inserindo no banco de dados e agora eu quero fazer uma consulta como eu faço ?
quero fazer essa consulta quando eu clico num botão o codigo que eu to usando é assim.
Button Consulta = (Button) findViewById(R.id.botaoConsultar);
Consulta.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
output = (TextView) findViewById(R.id.out_text);
List names = dh.selectAll();
StringBuilder sb = new StringBuilder();
sb.append(“Arquivos do Banco de Dados:\n”);
for (String name : names) {
sb.append(name + “\n”);
}
Log.d(“EXAMPLE”, “names size – ” + name.size());
output.setText(sb.toString());
}
});
se nao me engano esse codigo é seu mas nao sei se o metodo que se deve usar é realmete esse selectAll ou um que se chama getAlunoById.
por favor me ajuda sou novo em android.
Cara depende da consulta que vc quer fazer. O que vc quer consultar no banco?
Estou inserindo os campos.nome telefone e endereco e depois quero consiltar os.msms campos.para.ter certeza se.estou inserindo da maneira correta, se vc puder me mostrar um exemplo disso estou comecaondo a.desenvolver e estou tentando fazer um cadastro simple no bd,obrigado pela atencao
Cara se vc quer testar todos os valores inseridos, tenta dar um select em todos os registros:
public List getLista(){
Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
List lista = new ArrayList();
while(c.moveToNext()){
Objeto a = new Objeto();
a.setId(c.getInt(0));
a.setNome(c.getString(1));
.
.
.
// assim por diante
lista .add(a);
}
c.close();
return lista;
}
Agora nao sei se a inserção esta certa da uma olhada:
Aqui é a classe Dao onde eu to pegando os valores que foram digitados no layout
public void inserir(aluno al){
ContentValues valores = new ContentValues();
valores.put(“nome”, al.getNome());
valores.put(“telefone”, al.getTelefone());
valores.put(“endereco”, al.getEndereco());
getWritableDatabase().insert(TABELA, null, valores);
}
E aqui é qualdo se clica no botao para enviar o relatrio para o bd.Esse exemplo eu tirei de um post que vc colocou no site mas nao sei se precisa mudar alguma coisa
Button botao = (Button) findViewById(R.id.botao_Inserir);
botao.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText nome = (EditText) findViewById(R.id.EditNome);
EditText telefone = (EditText) findViewById(R.id.editTelefone);
EditText endereco = (EditText) findViewById(R.id.editEndereco);
Aluno.setNome(nome.getEditableText().toString());
Aluno.setTelefone(telefone.getEditableText().toString());
Aluno.setEndereco(endereco.getEditableText().toString());
AlunoD dao = new AlunoD(Teste_For_AlunoActivity.this);
if(posicao != -1){
Aluno.setId(posicao+1);
dao.alterar(Aluno);
}else{
dao.inserir(Aluno);
}
dao.close();
Quando vc testou esse código, qual foi a resposta?
Houve algum erro?
Olá Yuri,muito bacana o Blog. Só queria fazer uma sugestão de melhoria no método de inserção. As vezes acontece no projeto que a pessoa insere o modelo no banco e logo em seguida passa esse objeto em algum parametro para outra coisa. O problema tá que esse objeto que foi inserido no banco continua sem id.
Se a pessoa pessoa adicionar essas 4 linhas após o getWritableDatabase,o objeto inserido no banco já recebe seu id.
Cursor c = getReadableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
c.moveToLast();
pessoa.setId(c.getLong(0));
c.close();
🙂
Bacana Pedro, valeu pela dica cara, não tinha me ligado nisso.. abração