Android中的SQLite查询来计算行数

我试图创build一个简单的login表单,在login屏幕上input的loginID和密码与存储在数据库中的密码进行比较。

我正在使用以下查询:

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

问题是,我不知道,我如何执行上面的查询并存储返回的计数。

这里是数据库表的样子(我pipe理使用execSQl方法成功创build数据库)

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

有人可以指导我怎么做到这一点? 如果可能的话,请提供一个样本片段来完成上述任务。

@scottyab参数化的DatabaseUtils.queryNumEntries(db,table,whereparams)存在于API 11 +, 自API 1以来没有存在的whereparams 。 答案将不得不与一个db.rawQuery创build一个光标:

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

DatabaseUtils.queryNumEntries (自api:11)是非常有用的替代scheme,否定了对原始SQL(yay!)的需求。

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

使用SQLiteStatement 。

例如

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

请参阅rawQuery(String,String [])和Cursor的文档

您的DADABASE_COMPARE SQL语句当前是无效的, loginnameloginpass不会被转义, loginnameand之间没有空格,并且以()结束语句; 代替 ; – 如果你用密码的密码login,那么这个语句将会以

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

另外,您应该使用selectionArgsfunction,而不是连接login名和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 }); ... } 

假设你已经build立了数据库( 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); 

这是最简洁和精确的select。 无需处理游标及其closures。

如果您正在使用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); 

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

如果你想获得logging的数量,那么你必须在一些字段上应用组,或应用下面的查询。

喜欢

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