SQLite Query в Android для подсчета строк

Я пытаюсь создать простую форму входа, где я сравниваю идентификатор входа и пароль, введенные на экране входа, с тем, что хранится в базе данных.

Я использую следующий запрос:

final String DATABASE_COMPARE = "select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ; 

Проблема в том, что я не знаю, как я могу выполнить вышеупомянутый запрос и сохранить возвращенный счет.

Вот как выглядит таблица базы данных (мне удалось создать базу данных успешно с помощью метода 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);"; 

Может ли кто-нибудь любезно объяснить мне, как я могу это достичь? Если возможно, предоставьте образец фрагмента, чтобы выполнить вышеуказанную задачу.

Solutions Collecting From Web of "SQLite Query в Android для подсчета строк"

DatabaseUtils.queryNumEntries (поскольку api: 11) является полезной альтернативой, которая отрицает необходимость в сыром SQL (yay!).

 SQLiteDatabase db = getReadableDatabase(); DatabaseUtils.queryNumEntries(db, "users", "uname=? AND pwd=?", new String[] {loginname,loginpass}); 

@scottyab параметризованный DatabaseUtils.queryNumEntries (db, table, whereparams) существует в API 11 +, тот, который не имеет whereparams, существует с API 1 . Ответ должен был бы создать курсор с db.rawQuery:

 Cursor mCount= db.rawQuery("select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass +"'", null); mCount.moveToFirst(); int count= mCount.getInt(0); mCount.close(); 

Мне также нравится ответ @ Dre с параметризованным запросом.

Используйте SQLiteStatement .

например

  SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " ); long count = s.simpleQueryForLong(); 

См. RawQuery (String, String []) и документация для курсора

Ваш SQL-запрос DADABASE_COMPARE в настоящее время недействителен, loginname и loginpass не будут экранированы, между loginname и пробелом нет пробела, и вы заканчиваете утверждение с помощью); вместо ; – Если вы вошли в систему как bob с паролем пароля, это заявление закончится как

 select count(*) from users where uname=boband pwd=password); 

Кроме того, вы должны, вероятно, использовать функцию selectionArgs, вместо того, чтобы объединять логин и логин.

Чтобы использовать selectionArgs, вы бы сделали что-то вроде

 final String SQL_STATEMENT = "SELECT COUNT(*) FROM users WHERE uname=? AND pwd=?"; private void someMethod() { Cursor c = db.rawQuery(SQL_STATEMENT, new String[] { loginname, loginpass }); ... } 

Предполагая, что у вас уже установлено соединение с базой данных ( db ), я считаю, что самый элегантный способ – придерживаться класса Cursor и делать что-то вроде:

 String selection = "uname = ? AND pwd = ?"; String[] selectionArgs = {loginname, loginpass}; String tableName = "YourTable"; Cursor c = db.query(tableName, null, selection, selectionArgs, null, null, null); int result = c.getCount(); c.close(); return result; 

Как получить счет столбца

 final String DATABASE_COMPARE = "select count(*) from users where uname="+loginname+ "and pwd="+loginpass; int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null); 

Это самая краткая и точная альтернатива. Нет необходимости обрабатывать курсоры и их закрытие.

Если вы используете ContentProvider, вы можете использовать:

 Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"}, uname=" + loginname + " and pwd=" + loginpass, null, null); cursor.moveToFirst(); int count = cursor.getInt(0); 

Другой способ:

 myCursor.getCount(); 

На курсоре:

 Cursor myCursor = db.query(table_Name, new String[] { row_Username }, row_Username + " =? AND " + row_Password + " =?", new String[] { entered_Password, entered_Password }, null, null, null); 

Если вы можете думать о том, чтобы уйти от необработанного запроса.

Если вы хотите получить счетчик записей, вам необходимо применить группу в каком-либо поле или применить следующий запрос.

подобно

 db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);