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

标签 java android sqlite android-sqlite

当我单击“更改密码类别或布局”中的“提交”按钮时,应用程序崩溃。我的代码有什么问题,请教我!提前致谢。我正在使用 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/

相关文章:

java - 如果标签包含目标,则标签之间的正则表达式匹配

android - Google Drive 的内容提供者

c# - 内存中的 SQLite - TransactionScope - 已检测到环境事务

javascript - 如何将Javascript连接到Python以两种方式共享JSON格式的数据?

java - 将字符串转换为 GregorianCalendar

java - 无法在 jsonarray 上使用 isEmpty 方法,它会给出异常 groovy.lang.MissingMethodException : No signature of method

java - 我在使用 FedEx express 测试跟踪号时遇到错误

java - sqlite 查询 Android 时出错

android - 个性化删除线 Textview

python - 在 JSONField 中搜索文本