gpt4 book ai didi

java - 如何更新 SQLite 数据库(登录和注册系统)中的密码?

转载 作者:行者123 更新时间:2023-12-02 02:26:53 25 4
gpt4 key购买 nike

当我单击“更改密码类别或布局”中的“提交”按钮时,应用程序崩溃。我的代码有什么问题,请教我!提前致谢。我正在使用 Sqlite 数据库作为用户登录系统,用户可以从应用程序栏布局更改密码。单击应用栏中的>>更改密码时,会弹出新 Activity ,即更改密码 Activity 。到目前为止,一切正常,但在输入密码并单击提交按钮后,应用程序崩溃并返回到 MainActivity。

这是我的更改密码类

public class changePasswordActivity extends AppCompatActivity {

EditText oldpasswordEditText;
EditText newpasswordEditText;
EditText confirmpasswordEditText;
Button btnsubmit;

String realusername, realpassword;


String checkoldpass, checknewpass, checkconfirmpass;

SQLiteHelper sqLiteHelper;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_change_password);

oldpasswordEditText = findViewById(R.id.oldpasswordEditText);
newpasswordEditText = findViewById(R.id.newPasswordEditText);
confirmpasswordEditText = findViewById(R.id.confirmPasswordEditText);
btnsubmit= findViewById(R.id.btnsubmit);

checkoldpass = oldpasswordEditText.getText().toString();
checknewpass = newpasswordEditText.getText().toString();
checkconfirmpass = confirmpasswordEditText.getText().toString();

realusername = getIntent().getStringExtra("USERNAME");
realpassword= getIntent().getStringExtra("PASSWORD");

btnsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if(!(checkconfirmpass.equals(checknewpass))) {
Toast.makeText(changePasswordActivity.this,"New Password didn't matched",Toast.LENGTH_SHORT).show();

}else if (!(realpassword.equals(checkoldpass))){
Toast.makeText(changePasswordActivity.this,"Old password didn't matched",Toast.LENGTH_SHORT).show();
}
else if (checkconfirmpass.equals(checkoldpass)){
Toast.makeText(changePasswordActivity.this,"New password cannot be same as old password",Toast.LENGTH_SHORT).show();

}else if(checkconfirmpass.equals(checknewpass.equals(checkoldpass))) {


Toast.makeText(changePasswordActivity.this, "New password cannot be same as old password", Toast.LENGTH_SHORT).show();
}
else{
sqLiteHelper = new SQLiteHelper(changePasswordActivity.this);
sqLiteHelper.changepassword(checknewpass,realusername);
}

}
});
}
}

这是我的 SQLiteHelper 类

public class SQLiteHelper extends SQLiteOpenHelper {

SQLiteDatabase db;
private static final String DATABASE_NAME = "info.db";
private static final int DATABASE_VERSION = 1;

public static final String TABLE_NAME = "profile";
public static final String COLUMN_ID = "userid";
public static final String COLUMN_FULLNAME = "fullname";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_PASSWORD = "password";
public static final String COLUMN_MOBILE = "mobile";

private static final String CREATE_TABLE_QUERY =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_FULLNAME + " TEXT, " +
COLUMN_EMAIL + " TEXT, " +
COLUMN_PASSWORD + " TEXT, " +
COLUMN_MOBILE + " TEXT " + ")";

//modified constructor
public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_QUERY);
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}


public Cursor getData() {
String query = "SELECT * FROM" + TABLE_NAME;

Cursor data = db.rawQuery(query, null);
return data;
}

public void changepassword(String mpassword, String mname) {



Cursor cur= db.rawQuery("UPDATE "+SQLiteHelper.TABLE_NAME+" SET "
+SQLiteHelper.COLUMN_PASSWORD
+" = '"+mpassword+"' WHERE "+ SQLiteHelper.COLUMN_EMAIL+" = ?",new String[]{mname});

}
}

最佳答案

db将为空,也不需要Cursor,所以更改

public void changepassword(String mpassword, String mname) {
Cursor cur= db.rawQuery("UPDATE "+SQLiteHelper.TABLE_NAME+" SET "
+SQLiteHelper.COLUMN_PASSWORD
+" = '"+mpassword+"' WHERE "+ SQLiteHelper.COLUMN_EMAIL+" = ?",new String[]{mname});
}

致:-

public void changepassword(String mpassword, String mname) {
SQLiteDatabase db = this.getWriteableDatabae();
db.rawQuery("UPDATE "+SQLiteHelper.TABLE_NAME+" SET "
+SQLiteHelper.COLUMN_PASSWORD
+" = '"+mpassword+"' WHERE "+ SQLiteHelper.COLUMN_EMAIL+" = ?",new String[]{mname});
}

您在使用 getData 方法时也会遇到同样的问题,因此您应该将 SQLiteDatabase db = this.getWriteableDatabae(); 添加到 getData 中> 方法也是如此。

<小时/>

或者你可以改变:-

public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

至:-

public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
db = this.getWriteableDatabase();
}

在这种情况下 db 将是一个有效的 SQLiteDatabase。

关于java - 如何更新 SQLite 数据库(登录和注册系统)中的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com