>我有用户信息表,需要获取用户密码和用户名 查询:
Cursor cursor = db.rawQuery("select "+User.COL_NAME +User.COL_PASS +" from " + User.TABLE_NAME+" WHERE "+User.COL_NAME+ User.COL_PASS +"=?", new String[]{UserName , PassWord});
但我不能那样做,错误消息是:
Caused by: android.database.sqlite.SQLiteException: no such column: UserNamePassword (code 1): , while compiling: select UserNamePassword from users WHERE UserNamePassword=?
这是我的代码
public String getUserByUserAndPassword(String UserName , String PassWord) {
String All_info="" ;
Cursor cursor = db.rawQuery("select "+User.COL_NAME +User.COL_PASS +" from " + User.TABLE_NAME+" WHERE "+User.COL_NAME+ User.COL_PASS +"=?", new String[]{UserName , PassWord});
while (cursor.moveToNext()) {
String user_1 = cursor.getString(cursor.getColumnIndex(User.COL_NAME));
String pass_1 = cursor.getString(cursor.getColumnIndex(User.COL_PASS));
All_info= user_1+"/"+pass_1;
}
cursor.close();
return All_info ;}
由:android.database.sqlite.SQLite异常:没有这样的列:用户名密码(代码1(:,编译时:从用户中选择用户名密码,其中用户名密码=?
您的查询存在语法错误,但首先我想提及代码中逻辑上错误的其他部分。
您的查询应该返回0
或1
行,因为我想没有 2 个用户名相同的用户的情况,对吧?
因此,不需要while
循环。一个简单的if
陈述就足够了。
另外,为什么希望查询返回用户名和密码?
您已经知道它们,因为您使用它们来搜索此用户。
如果没有用户拥有这些数据,则查询将不会返回任何内容。
因此,请将查询更改为以下内容:
Cursor cursor = db.rawQuery(
"SELECT COUNT(*) FROM " + User.TABLE_NAME +
" WHERE "+ User.COL_NAME + " = ? AND " + User.COL_PASS +" = ?",
new String[]{UserName , PassWord}
);
如果没有这样的用户,则此查询将仅返回 1 行和 1 个整数列,值为0
,如果有,则返回值1
。
其余代码需要:
if (cursor.moveToFirst()) {
int counter = cursor.getInt(0);
if (counter > 0) {
All_info= UserName + "/" + PassWord;
}
}
cursor.close();
return All_info;
您的查询是错误的,请参阅控制台中打印的最终查询。您的代码应该是:
Cursor cursor = db.rawQuery("select "+User.COL_NAME +", "+User.COL_PASS +" from " + User.TABLE_NAME+" WHERE "+User.COL_NAME+"='"+UserName+"' AND "+ User.COL_PASS +"='"+PassWord+"'");
你写错了查询。下面的查询将起作用,但为什么您编写查询以使用用户名和密码本身获取用户名和密码,因此,要么在 select 语句中为整条记录编写所需的column_names或仅 *。
Cursor cursor = db.rawQuery("select "+User.COL_NAME +", "+User.COL_PASS +" from " + User.TABLE_NAME+" WHERE "+User.COL_NAME+ "=?" + "and" + User.COL_PASS +"=?", new String[]{UserName , PassWord});