Pegar o último valor da SQLite salvo

10 respostas
R

Aprendendo Sqlite
Estou tentando setar um texto com o último valor salvo no SQLite. Vocês sabem como fazer isso .
.
.
package com.testesqlite.myapplication;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

public class BD {
private SQLiteDatabase bd;

public BD(Context context){
	BDCore auxBd = new BDCore(context);
	bd = auxBd.getWritableDatabase();
}


public void inserir(Usuario usuario){
	ContentValues valores = new ContentValues();
	valores.put("nome", usuario.getNome());
	
	bd.insert("usuario", null, valores);
}


public void atualizar(Usuario usuario){
	ContentValues valores = new ContentValues();
	valores.put("nome", usuario.getNome());

	bd.update("usuario", valores, "_id = ?", new String[]{""+usuario.getId()});
}


public void deletar(Usuario usuario){
	bd.delete("usuario", "_id = "+usuario.getId(), null);
}

}
package com.testesqlite.myapplication;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;
public class BDCore extends SQLiteOpenHelper {

private static final String NOME_BD = teste;

private static final int VERSAO_BD = 1;
public BDCore(Context ctx){
	super(ctx, NOME_BD, null, VERSAO_BD);
}


@Override
public void onCreate(SQLiteDatabase bd) {
	bd.execSQL("create table usuario(_id integer primary key autoincrement, nome text not null);");
}

@Override
public void onUpgrade(SQLiteDatabase bd, int arg1, int arg2) {
	bd.execSQL("drop table usuario;");
	onCreate(bd);
}

}
package com.testesqlite.myapplication;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

import com.testesqlite.myapplication.R;

import android.database.sqlite.SQLiteDatabase;

public class MainActivity extends Activity {
private Usuario usuario = new Usuario();

EditText edittexto;
TextView texto;

<a class="mention" href="/u/override">@Override</a>

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

edittexto = (EditText) findViewById(R.id.edittexto);

texto = (TextView) findViewById(R.id.texto);

BD bd = new BD(this);

texto.setText(usuario.getNome());

}

public void Salvar(View view) {

edittexto = (EditText) findViewById(R.id.edittexto);
usuario.setNome(edittexto.getText().toString());
BD bd = new BD(this);
	

	bd.inserir(usuario);
	
	Toast.makeText(this, "Usuário inserido com sucesso!", Toast.LENGTH_SHORT).show();


}

}

10 Respostas

darlan_machado

Dá uma olhada

P

SELECT *FROM usuario WHERE _id = (SELECT MAX( _id ) FROM usuario);

R

@programador1225
Não estendi muito bem …
Isso
SELECT *FROM usuario WHERE _id = (SELECT MAX( _id ) FROM usuario);
É para colocar onde?

P

Essa query vai trazer o ultimo usuário inserido no banco de dados.

R
<a class="mention" href="/u/programador1225">@programador1225</a>

Como ficaria fazendo mais ou menos assim .

public String somarCategoria() {

String total = “”;

String SelectQuery = “select nome FROM usuario”;

Cursor cursor = bd.rawQuery(SelectQuery, null);
if (cursor.moveToNext()) {
total = cursor.getString(0);

}

return total;

}

ISSO é aplicável?  Mudando algumas coisas.
P

Tenta isso :

StringBuilder select = new StringBuilder();
            select.append("SELECT *FROM usuario WHERE _id = (SELECT MAX( _id ) FROM usuario");

            Cursor dados = bd.rawQuery(select.toString(), null);

            Usuario usuario = null;

            if (dados.getCount() != 0)
            {
                usuario = new Usuario();

                dados.moveToNext();
                
                 usuario.setId(dados.getInt(dados.getColumnIndex("_id")));
                usuario.setNome(dados.getString(dados.getColumnIndex("nome")));
        
            }
R

@programador1225
Esse teu código que você postou vai retornar o que?
No último código que eu postei . Eu consigo setar no TextView o primeiro valor que foi salvo… mas eu quiria o último.

P

Seguinte cara, o ultimo código que postei criar um usuário com os dados do ultimo registro inserido no banco de dados.
Na sua classe BD crie um método chamado getUltimoUsuario com o seguinte corpo.

public Usuario getUltimoUsuario(Context context)
{                                
     // Cria um SQLiteDatabase para leitura
   SQLiteDatabase bd = new BDCore(context).getReadableDatabase();

    StringBuilder select = new StringBuilder();
    Usuario usuario = null;

    // Query para buscar o ultimo registro inserido no Banco de Dados
    select.append("SELECT *FROM usuario WHERE _id = (SELECT MAX( _id ) FROM usuario");
        
    // Executa a Query e armazena os dados retornados em um Cursor
    Cursor dados = bd.rawQuery(select.toString(), null);

   // Verifica se retornou ao menos um registro
        if (dados.getCount() != 0)
        {
          // Instancia um Objeto do Tipo Usuario para armazenar os dados
          usuario = new Usuario();
         
         // Move o cursor para o próximo registro 
          dados.moveToNext();

          // Preenche o Objeto usuario com os dados do cursor   
          usuario.setId(dados.getInt(dados.getColumnIndex("_id")));
          usuario.setNome(dados.getString(dados.getColumnIndex("nome")));
      }
    // Retorna o usuário que contém os dados do ultimo registro inserido no banco
      return usuario;
        }

}

O método criado acima retorna o ULTIMO Usuário inserido no banco.

Agora é só chamar este método na sua MainActivity e ele vai te retornar o ULTIMO usuario inserido no banco de dados.

Agora na sua MainActivity faça o seguinte :

Usuario usuario = new BD(this).getUltimoUsuario(this);

if(usuario != null)
{
        Toast.makeText(this, "Ultimo usuário salvo : "+usuario.getNome(), Toast.LENGTH_SHORT).show();
}
R

@programador1225
Obrigado por sua atenção.

P

Editei a resposta

Criado 3 de setembro de 2018
Ultima resposta 5 de set. de 2018
Respostas 10
Participantes 3