【问题标题】:SQLite Table is inserting but not updatingSQLite 表正在插入但未更新
【发布时间】: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 我听不懂你想说什么……你能解释一下吗?

标签: android database sqlite


【解决方案1】:

在您的 updateDataAdmin() 方法中,您没有对传入的密码值做任何事情。

要将其更新到数据库,请将其添加到您传递给 update()ContentValues,例如

table2.put("A_password", A_password);

(还要考虑 Anonymoy 对命名约定的反馈。它让您和他人的事情变得更容易。)

【讨论】:

  • 我这样做了,但仍然无法正常工作。在过去的两天里,我一直在做这件事。另一张桌子工作正常。它的所有操作都做得很好。另外,请帮我纠正这个错误,这是根本原因。 E/libc:访问被拒绝查找属性“ro.serialno”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2012-10-29
  • 2013-02-23
相关资源
最近更新 更多