【发布时间】:2021-03-13 18:21:16
【问题描述】:
第一个表中的数据正在更新,而第二个表中的数据没有更新。请帮助更新所有表格。我在这里附上数据库助手类和 java 编码。以下代码用于更新忘记密码的表 2 并更新管理员的新密码。用户的新密码只会更新。我收到一条消息“密码已更新”,但当我登录时它显示“凭据无效”,因为该表未更新。
提前致谢:)
MyDB.execSQL("create Table users(Fullname TEXT NOT NULL PRIMARY KEY, Username TEXT NOT NULL, Password TEXT NOT NULL, Email TEXT NOT NULL, Phoneno TEXT NOT NULL, Address TEXT NOT NULL, City TEXT NOT NULL, Pincode TEXT NOT NULL)");
MyDB.execSQL("create Table admin(ID INTEGER PRIMARY KEY AUTOINCREMENT,A_username TEXT NOT NULL, A_email TEXT NOT NULL, A_password TEXT NOT NULL)");
@Override
public void onUpgrade(SQLiteDatabase MyDB, int i, int i1) {
MyDB.execSQL(" DROP TABLE IF EXISTS users");
MyDB.execSQL(" DROP TABLE IF EXISTS admin");
onCreate(MyDB);
}
public boolean updateDataAdmin(String A_username, String A_password)
{
SQLiteDatabase MyDB=this.getWritableDatabase();
ContentValues table2=new ContentValues();
table2.put(TABLE2_COL_3,A_username);
int result = MyDB.update("admin", table2, "A_username=?",new String[] {A_username});
if (result == -1) return false;
else
return true;
}
MainActivity 代码:
@Override
public void onClick(View v) {
String user = username.getText().toString();
String Password = password.getText().toString();
String repass = retype.getText().toString();
if (Password.isEmpty() || repass.isEmpty()) {
Toast.makeText(AdminReset.this, "Fields cannot be empty", Toast.LENGTH_SHORT).show();
}else{
if (Password.equals(repass)) {
Boolean updateadminPass = DB.updateDataAdmin(user, Password);
if (updateadminPass == true) {
Intent intent = new Intent(getApplicationContext(), AdminLogin.class);
startActivity(intent);
Toast.makeText(AdminReset.this, "Password Updated Successfully", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AdminReset.this, "Password Not Updated", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(AdminReset.this, "Passwords does not match!", Toast.LENGTH_SHORT).show();
}
}
}
});
【问题讨论】:
-
抱歉,table2、TABLE2_COL_3 或 ContentValues() 是什么?使用这种命名约定很难遵循此代码。使用更有意义的名称,也许错误会变得更加明显。但要实现密码重置功能,您只需要生成一个随机令牌,您可以通过电子邮件(或可能的短信)发送该令牌。要存储此令牌,您需要在 users 表中创建一个附加字段。然后,当用户以专用形式提供正确的令牌时,您更新密码字段,并清除令牌字段,使其无法重复使用。我看不到 table2 的用途。
-
@Anonymous 我听不懂你想说什么……你能解释一下吗?