aru*_*run 91 sqlite android count
我正在尝试创建一个简单的登录表单,我将登录屏幕上输入的登录ID和密码与存储在数据库中的登录ID和密码进行比较.
我正在使用以下查询:
final String DATABASE_COMPARE =
"select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ;
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道,我如何执行上述查询并存储返回的计数.
这是数据库表的样子(我已经使用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);";
Run Code Online (Sandbox Code Playgroud)
有人可以指导我如何实现这一目标吗?如果可能,请提供一个示例代码段来执行上述任务.
sco*_*yab 120
DatabaseUtils.queryNumEntries(因为api:11)是一个有用的替代方案,可以消除对原始SQL的需求(耶!).
SQLiteDatabase db = getReadableDatabase();
DatabaseUtils.queryNumEntries(db, "users",
"uname=? AND pwd=?", new String[] {loginname,loginpass});
Run Code Online (Sandbox Code Playgroud)
小智 112
@scottyab参数化的DatabaseUtils.queryNumEntries(db,table,whereparams)存在于API 11 +中,自API 1以来不存在whereparams的那个.答案必须是使用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();
Run Code Online (Sandbox Code Playgroud)
我也喜欢@ Dre的答案,参数化查询.
Tek*_*ebo 62
例如
SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " );
long count = s.simpleQueryForLong();
Run Code Online (Sandbox Code Playgroud)
Dre*_*Dre 22
请参阅rawQuery(String,String [])和Cursor的文档
你DADABASE_COMPARE SQL语句是当前无效,loginname
并loginpass
不会被转义,之间不存在空间loginname
和and
,你最终该发言); 代替 ; - 如果您使用密码密码登录为bob,则该语句最终将为
select count(*) from users where uname=boband pwd=password);
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用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 });
...
}
Run Code Online (Sandbox Code Playgroud)
Elo*_*rro 22
假设您已经db
建立了Database()连接,我认为最优雅的方法是坚持使用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;
Run Code Online (Sandbox Code Playgroud)
kon*_*ity 12
final String DATABASE_COMPARE = "select count(*) from users where uname="+loginname+ "and pwd="+loginpass;
int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null);
Run Code Online (Sandbox Code Playgroud)
这是最简洁和精确的替代方案.无需处理游标及其关闭.
如果您使用的是ContentProvider,那么您可以使用:
Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"},
uname=" + loginname + " and pwd=" + loginpass, null, null);
cursor.moveToFirst();
int count = cursor.getInt(0);
Run Code Online (Sandbox Code Playgroud)
如果要获取记录数,则必须在某些字段上应用组或应用以下查询.
db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
Run Code Online (Sandbox Code Playgroud)
另一种方式是使用:
myCursor.getCount();
Run Code Online (Sandbox Code Playgroud)
在光标上:
Cursor myCursor = db.query(table_Name, new String[] { row_Username },
row_Username + " =? AND " + row_Password + " =?",
new String[] { entered_Password, entered_Password },
null, null, null);
Run Code Online (Sandbox Code Playgroud)
如果你能想到远离原始查询.
归档时间: |
|
查看次数: |
127243 次 |
最近记录: |