Estou tentando criar um formulário de Login simples, onde comparo o id de login e a senha inseridos na tela de login com os armazenados no banco de dados.
Estou usando a seguinte consulta:
final String DATABASE_COMPARE =
"select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ;
A questão é, não sei, como posso executar a consulta acima e armazenar a contagem retornada.
É assim que a tabela do banco de dados se parece (eu consegui criar o banco de dados com sucesso usando o método execSQl)
private static final String
DATABASE_CREATE =
"create table users (_id integer autoincrement, "
+ "name text not null, uname primary key text not null, "
+ "pwd text not null);";//+"phoneno text not null);";
Alguém pode gentilmente me orientar sobre como posso conseguir isso? Se possível, forneça um snippet de amostra para fazer a tarefa acima.
SELECT COUNT(*)
equeryNumEntries()
recuperar todos os registros e ver quantos existem, ou seja,cursor.getCount()
@scottyab o DatabaseUtils.queryNumEntries parametrizado (db, table, whereparams) existe na API 11 +, aquele sem o whereparams existe desde a API 1 . A resposta teria que ser criar um Cursor com um db.rawQuery:
Também gosto da resposta do @Dre, com a consulta parametrizada.
fonte
mCount.getInt()
écolumnindex
. Obrigado pela ajuda!Use um SQLiteStatement .
por exemplo
fonte
?
s na consulta e, em seguida, usarbindString(int, String)
ebindLong(int, long)
para inserir os valores. Veja aqui .Veja rawQuery (String, String []) e a documentação do Cursor
Sua instrução SQL DADABASE_COMPARE é atualmente inválida
loginname
eloginpass
não terá escape, não há espaço entreloginname
eand
, e você termina a instrução com); ao invés de ; - Se você estivesse fazendo login como bob com a senha password, essa declaração terminaria comoAlém disso, você provavelmente deve usar o recurso selectionArgs, em vez de concatenar nome de login e senha de login.
Para usar selectionArgs, você faria algo como
fonte
Supondo que você já tenha uma
db
conexão Database ( ) estabelecida, acho que a maneira mais elegante é manter aCursor
classe e fazer algo como:fonte
como obter coluna de contagem
Esta é a alternativa mais concisa e precisa. Não há necessidade de manipular cursores e seu fechamento.
fonte
Se você estiver usando ContentProvider, poderá usar:
fonte
Outra maneira seria usar:
em um Cursor como:
Se você puder pensar em fugir da consulta bruta.
fonte
Se você deseja obter a contagem de registros, deve aplicar o grupo por em algum campo ou aplicar a consulta abaixo.
Gostar
fonte
fonte