Android中的SQLite Query可以计算行数

时间:2011-03-05 06:58:48

标签: android sqlite count

我正在尝试创建一个简单的登录表单,我将登录屏幕上输入的登录ID和密码与存储在数据库中的登录ID和密码进行比较。

我正在使用以下查询:

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 个答案:

答案 0 :(得分:119)

DatabaseUtils.queryNumEntries(因为api:11)是一种有用的替代方法,可以消除对原始SQL的需求(耶!)。

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

答案 1 :(得分:111)

@scottyab参数化DatabaseUtils.queryNumEntries(db, table, whereparams)存在于API 11 +,without the whereparams exists since API 1。答案必须是使用db.rawQuery创建一个Cursor:

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的答案,参数化查询。

答案 2 :(得分:62)

使用SQLiteStatement

e.g。

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

  long count = s.simpleQueryForLong();

答案 3 :(得分:22)

请参阅rawQuery(String, String[])Cursor

的文档

您的DADABASE_COMPARE SQL语句目前无效,loginnameloginpass将不会被转义,loginnameand之间没有空格,您就会结束声明);代替 ; - 如果您使用密码密码登录为bob,则该语句最终将为

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

此外,您应该使用selectionArgs功能,而不是连接loginname和loginpass。

要使用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 });
    ...
}

答案 4 :(得分:22)

假设您已经建立了数据库(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;

答案 5 :(得分:12)

how to get count column

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

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

这是最简洁和精确的选择。无需处理游标及其关闭。

答案 6 :(得分:6)

如果您使用的是ContentProvider,则可以使用:

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

答案 7 :(得分:5)

如果您想获取记录数,则必须在某些字段上应用该组或应用以下查询。

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

答案 8 :(得分:5)

另一种方法是使用:

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

如果你能想到远离原始查询。

答案 9 :(得分:1)

int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();