SQLite Query в Android для подсчета строк - PullRequest
90 голосов
/ 05 марта 2011

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

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

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);";

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

Ответы [ 10 ]

119 голосов
/ 15 января 2012

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

SQLiteDatabase db = getReadableDatabase();
DatabaseUtils.queryNumEntries(db, "users",
                "uname=? AND pwd=?", new String[] {loginname,loginpass});
111 голосов
/ 18 января 2012

@ 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 с параметризованным запросом.

62 голосов
/ 21 марта 2011

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

например

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

  long count = s.simpleQueryForLong();
22 голосов
/ 14 января 2013

Если у вас уже установлено соединение с БД (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;
22 голосов
/ 05 марта 2011

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

Ваш оператор SQL DADABASE_COMPARE в настоящее время недопустим, loginname и loginpassне будет экранирован, между loginname и and нет пробела, и вы заканчиваете оператор с помощью);вместо ;- Если вы входите в систему как 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 });
    ...
}
12 голосов
/ 06 мая 2012

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

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

int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null);

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

6 голосов
/ 14 февраля 2014

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

Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"},
            uname=" + loginname + " and pwd=" + loginpass, null, null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);
5 голосов
/ 18 июня 2013

Другим способом было бы использовать:

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);

Если вы можете отказаться от необработанного запроса.

5 голосов
/ 05 марта 2011

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

Как

db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
1 голос
/ 13 сентября 2018
int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...