Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的SQLite查询用于计算行数_Android_Sqlite_Count - Fatal编程技术网

Android中的SQLite查询用于计算行数

Android中的SQLite查询用于计算行数,android,sqlite,count,Android,Sqlite,Count,我试图创建一个简单的登录表单,将登录屏幕上输入的登录id和密码与数据库中存储的id和密码进行比较 我正在使用以下查询: final String DATABASE_COMPARE = "select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ; 问题是,我不知道如何执行上述查询并存储返回的计数 下面是我使用execSQl方法成功创建数据库的数据库表的外观 private stati

我试图创建一个简单的登录表单,将登录屏幕上输入的登录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);";

有人能告诉我如何才能做到这一点吗?如果可能,请提供执行上述任务的示例代码段

如果要获取记录计数,则必须在某个字段上应用group by或应用下面的查询

喜欢 有关详细信息,请参阅和文档

您的DADABASE_COMPARE SQL语句当前无效,loginname和loginpass不会被转义,loginname和and之间没有空格,并且您以结束该语句;而不是;-如果您使用password作为bob登录,则该语句将以

select count(*) from users where uname=boband pwd=password);
此外,您可能应该使用SelectionAgs功能,而不是将loginname和loginpass连接起来

要使用SelectionAgs,您可以执行以下操作

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

e、 g

因为api:11是一个非常有用的替代方案,它消除了对原始SQLyay!的需求

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

@scottyab参数化存在于API 11+,即。答案必须是使用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的答案,带有参数化查询


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

假设已经建立了数据库数据库连接,我认为最优雅的方法是坚持使用游标类,并执行如下操作:

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;

另一种方法是使用:

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

如果您可以考虑远离原始查询。

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

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

对于操作系统<11,它得到NoSuchMethodError错误,是否有任何方法支持操作系统<11?@Khobaib检查来自ghchinoy@EduardoHerzer我找到了一种直接使用cursor.getCount的方法。@Khobaib这不是一种非常有效的方法。您应该始终更喜欢使用SELECT COUNT*和queryNumEntries,而不是检索所有记录并查看有多少记录,例如cursor.getcount您至少应该指定一列。传递null将返回所有列,不鼓励使用null,以防止从不打算使用的存储中读取数据。perfmattersIn事实上,如果必要的信息只是一个计数,那么检索单个列ID将不仅仅是这个答案与@scottyab的答案相比的一个优点,这也是非常好的,在这种情况下,您可以指定一个LIMIT子句。当您只想知道表中是否有行时,这非常有用,例如,从表限制1与无行中选择count*>0。我猜如果表中没有行或有大量行,那么速度会更快。这是我在搜索这个时遇到的特殊情况…@Teknogrebo:这是一个很好的答案,尽管我会使用参数化版本。您可以在查询中使用?s,然后使用bindStringint、String和bindLongint、long插入值。看到了吧。太棒了——从一开始就在Android上工作,从来都不知道这个数据库utils——谷歌应该更擅长推广这些utils……对于那些想知道的人来说,mCount.getInt的参数是columnindex。谢谢你的帮助!
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);
Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"},
            uname=" + loginname + " and pwd=" + loginpass, null, null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);
int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();