GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Verificação de cadastro por nome CURSOR [RESOLVIDO]

java
android
Tags: #<Tag:0x00007fc6d607b990> #<Tag:0x00007fc6d607b800>

#1

Bom dia pessoal, gostaria de cadastrar o jogador somente se o nome dele não fosse igual a nenhum outro cadastrado com mesmo nome, porém quando recebo os dados no cursor ou quanto não é retornado dados no cursor ele esta apresentando erro, como farei essa verificação, alguém poderia ajudar?

public void ConsultarSql(String sql) {

    try {
        dadosopenhelper = new BancoOpenHelper(this);


        conexao = dadosopenhelper.getWritableDatabase();

        Cursor cursor = conexao.rawQuery(sql, null);

        int Coluna_id = cursor.getColumnIndex("id");
        int Coluna_nome = cursor.getColumnIndex("nome");
        int Coluna_nivel = cursor.getColumnIndex("nivel");
        int Coluna_presente = cursor.getColumnIndex("presente");

        if(cursor.getCount()>0) {

            cursor.moveToFirst();

            do {

                Log.i("RESULTADO - id: ", cursor.getString(Coluna_id));
                Log.i("RESULTADO - nome: ", cursor.getString(Coluna_nome));
                Log.i("RESULTADO - nivel: ", cursor.getString(Coluna_nivel));
                Log.i("RESULTADO - presente: ", cursor.getString(Coluna_presente));

                cursor.moveToNext();
            } while (!cursor.isAfterLast());


        }

 } catch (SQLException ex) {

        Context context = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, "Erro ao Consultar! : " + ex, duration);
        toast.show();

    }
}

criarConexao();

String Consultar_nome = "select id, nome, nivel, presente from jogadores where nome =  '" + nome + "';";

ConsultarSql(Consultar_nome);

ArrayList<String> Nomes = new ArrayList<>();
int j = 0;

if (cursor.getCount() > 0) {

    cursor.moveToNext();

    for (int i = 0; i < cursor.getCount(); i++) {

        Nomes.add(String.valueOf(cursor.getString(1)));


    }

    for (int i = 0; i < Nomes.size(); i++) {


        if (nome.equals(Nomes.get(i))) {

            j = 1;

        }

    }

}
    if (j == 0) {

        String sql = "Insert into jogadores (nome, nivel, presente) values ('" + nome + "','" + nivel + "','" + presente + "')";
        ExecSql(sql);

        Context cont = getApplicationContext();
        int durat = Toast.LENGTH_SHORT;

        Toast toa = Toast.makeText(cont, "Jogador Inserido!", durat);
        toa.show();

        finish();

    } else {

        Context contex = getApplicationContext();
        int duratin = Toast.LENGTH_SHORT;

        Toast toas = Toast.makeText(contex, "Já existe jogador com este nome!", duratin);
        toas.show();


    }
}

#4

Cara, crie um método no seu DAO que verifique se o usuário já está cadastrado.

public boolean isCadastrado(String nome)
	{
		boolean existe = false;
		try 
		{
            dadosopenhelper = new BancoOpenHelper(this);
            conexao = dadosopenhelper.getWritableDatabase();

            Cursor cursor = conexao.rawQuery("SELECT *FROM jogadores WHERE nome =  '" + nome + "';", null);

            if (cursor.getCount() >= 1)
            {
				existe = true;
            }		   		  
		} 
		catch (SQLException ex)
		{

            Context context = getApplicationContext();
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, "Erro ao Consultar! : " + ex, duration);
            toast.show();

        }
		return existe;	
	}	

O método acima retorna verdadeiro se existir no banco um jogador com o nome passado como parâmetro.

Antes de chamar o método de inserir o novo jogador no banco faça o seguinte :

boolean jaExiste = isCadastrado(nomeDoJogadorQueEstaSendoInserido);
		   if(!jaExiste)
		   {
				// cadastra o jogador
		   }
		   else
		   {
		    // exibe mensagem dizendo que o jogador já está cadastrador
		   }

#5

Obrigado, eu vou testar aqui!


#6

Deu certo Obrigado!


#7

Por nada.