我正在尝试创建一个简单的登录表单,我将登录屏幕上输入的登录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);";
有人可以指导我如何实现这一目标吗?如果可能,请提供一个示例代码段来执行上述任务。
答案 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)
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语句目前无效,loginname
和loginpass
将不会被转义,loginname
和and
之间没有空格,您就会结束声明);代替 ; - 如果您使用密码密码登录为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)
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();