Boa tarde pessoal, gostaria de uma ajuda do pessoal, estou precisando criar uma tela de login que verifique no sqlite se esta o usuario e senha correto, tentei varias formas e achei esse exemplo, só que não funcionou.
Até onde sei, com o cursor ele percorre o banco e se achar o que esta digitado ele incrementa 1 no getcout, é isso?
Abaixo a parte do codigo que verificar o login, esta correto?
try
{
cursor = bancoDados.rawQuery("SELECT * FROM usuario WHERE usuMatricula LIKE '"+tf_User+"'",null);
cursor.moveToFirst(); //posiciona no primeiro registro
if (cursor.getCount() < 1)
{
ExibirMensagem("usuario não cadastrado", "desconhecido");
}
else
{
if(cursor.getString(2).equals(tf_Password.getText()))
{
if(cursor.getString(1).equals(tf_User.getText()))
{
ExibirMensagem("usuario cadastrado", "OK");
}
else
{
ExibirMensagem("usuario não cadastrado", "else");
}
}else
{
ExibirMensagem("senha errada ", "tudo errado");
}
}
}
catch(Exception erro) {
ExibirMensagem("Erro Banco", "Erro buscar dados no banco: "+erro.getMessage());
}
Só que não importa o que digite, sempre cai direto no “ExibirMensagem(“usuario não cadastrado”, “desconhecido”);”
jaqueson e você tem algum usuário cadastrado nessa tabela? Quanto ao código você está correto, ele efetua a consulta e caso encontre registro passa pela lógica que verifica login e senha.
Pois é, ele tem cadastrado usuario sim
Verifique no select a ordem das colunas que está vindo, verifique se está vindo a coluna de login e por segundo a coluna de senha.
como vejo isso, pois sou bem inexperiente em java/android
eu tava usando esse codigo abaixo para verificar se estava lendo corretamente, dai mudei de query para rawquery e mudei o select, posso ter feito alguma besteira nisso.
{
try
{
cursor = bancoDados.query("usuario",
new String [] {"usuMatricula","usuSenha"},
null,//selection,
null,//selectionArgs,
null,//groupBy,
null,//having,
null,//"order by nome"//orderBy)
null); // Limite de registros retornados
campoNome = cursor.getColumnIndex("usuMatricula");
camposenha = cursor.getColumnIndex("usuSenha");
int numeroRegistros = cursor.getCount();
if (numeroRegistros != 0)
{
// no java puro resultsewt.first();
cursor.moveToLast(); //posiciona no primeiro registro
matricula = cursor.getString(campoNome);
senha = cursor.getString(camposenha);
matriculaoficial = tf_User.getText().toString();
senhaoficial= tf_Password.getText().toString();
ExibirMensagem("Banco", matricula+" e "+ senha);
ExibirMensagem("tela", matriculaoficial+" e "+ senhaoficial);
return true;
}
else
return false;
}
catch(Exception erro) {
ExibirMensagem("Erro Banco", "Erro buscar dados no banco: "+erro.getMessage());
return false;
}
}
nesse caso por exemplo ele seta o cursor no ultimo registro, que seria usuario e senha jaja/jaja.
ele mostra na tela o aviso corretamente o que digitei nos edittext e o que esta no banco na ultima posição.
Nunca mechi com sqlite, mas sei que ele tem um gerenciador chama Sqlite Manager que você pode efetuar consultas no banco, editar tabelas, etc.
Execute o teu código acima e na linha 3 pegue o SQL que foi montado, tendo o SQL execute uma consulta no Sqlite Manager e verifique como a consulta está retornando a ordem das colunas de login e senha.
[quote=cristianogro]Nunca mechi com sqlite, mas sei que ele tem um gerenciador chama Sqlite Manager que você pode efetuar consultas no banco, editar tabelas, etc.
Execute o teu código acima e na linha 3 pegue o SQL que foi montado, tendo o SQL execute uma consulta no Sqlite Manager e verifique como a consulta está retornando a ordem das colunas de login e senha.
[/quote]
executei o select no SQliteStudio
SELECT * FROM usuario WHERE usuMatricula LIKE ‘julya’
ele retorna isso
_usuId usuMatricula usuSenha
3 julya julya
Não vou saber te afirmar se a mudança que você fez está correta, pensei que você estava usando JDBC, mas nessa alteração sua verificou via Debug ou outra forma as variáveis campoNome e camposenha se estão vindo com dados?
mandei exibir as variaveis e elas retornam com os dados do ultimo registro, se eu comparar somente o ultimo registro ele da OK, mas se quiser validar os registros anteriores da erro.
Não sei como fazer para ele comprar com todo o banco, parece que só comparar com a posição onde esta setado o cursor, deve ser uma besteira minha mesmo.
Mas não estou conseguindo achar essa besteira
Crie uma classe Usuario com os atributos login e senha.
Acredito que no trecho onde você faz um cursor.moveToFirst() você pode criar um do while e dentro dele instanciar seu objeto Usuario e setar os dados, após adicionar esse objeto Usuario numa lista tipada (List usuario) e na condição do seu do while vc coloca cursor.moveNext(), ficaria ± assim:
cursor.moveToFirst();
campoNome = cursor.getColumnIndex("usuMatricula");
camposenha = cursor.getColumnIndex("usuSenha");
List<Usuario> usuarios = new ArrayList<Usuario>();
do {
Usuario usuario = new usuario
usuario.setLogin(campoNome);
usuario.setSenha(campoSenha);
usuarios.add(usuario);
} while (cursor.moveToNext());
Seria ± a idéia como está nesse tópico: http://www.guj.com.br/java/303921-listview-nao-esta-trazendo-dados-do-sqlite-resolvido
Obrigado pela dica, vou dar uma pesquisa nessa parte de lista que ainda não conheco, mas a ideia é ela ir percorrendo os registros e comparando, isso?
No trecho de código que passei ele vai fazer um loop e vai pegando cada registro retornado do banco e vai setando o usuário/senha num objeto Usuario, após isso esse objeto Usuário é colocado na lista, ele não faz comparação nenhuma, se você quiser comparar/recuperar valores basta criar um loop nessa lista de usuários que você consegue recuperar o valor de cada usuário. Para percorrer a lista de usuários ficaria algo ± como isso:
for(int i = 0; i < usuarios.length(); i++){
String usuario;
String senha;
usuario = usuarios.get(i).getUsuario();
senha = usuarios.get(i).getSenha();
}
Obrigado, consegui fazer a verificação, agora só vou dar uma estudada melhor nessa parte das list, pois vou precisar tb fazer uma lista dessas com as informações de algumas colunas da tabela, mas ajudou muito, valeu cristianogro.
Só uma pergunta, fazendo essa lista tem como gravar ela em um arquivo neh?