【问题标题】:How to use update with prevent duplicate entries SQLiteDatabase如何使用更新以防止重复条目 SQLiteDatabase
【发布时间】:2018-01-29 06:57:00
【问题描述】:

地狱......我在我的代码中防止重复条目但是当更新此行中的任何字段时告诉我这个名字存在虽然我在同一行 例如,当更新 Age 告诉我这个 firstName 存在时,列 firstName 值 = Mohamed ,列 lastName 值 = taha 和列 Age 值 25。 如何解决这个问题?

这是我的方法:

public void saveStore(){
    String namePermission =ETNamePermission.getText().toString().trim();
    String notes = ETNotesPermission.getText().toString().trim();
    boolean isExist = dbHelper.isExistNamePErmission(namePermission);

    if ( intent == null && TextUtils.isEmpty(namePermission)|| TextUtils.isEmpty(namePermission) ){
        ETNamePermission.requestFocus();
        ETNamePermission.setError(getString(R.string.error_empty_text));
        return;
    }

    if (intent == null) {
        if (isExist ==true){
            ETNamePermission.requestFocus();
            ETNamePermission.setError(getString(R.string.error_exist_permission));
            return;
        }
        ItemsStore itemSavePErmission = new ItemsStore();
        itemSavePErmission.setNamePermission(namePermission);
        itemSavePErmission.setNotes(notes);
        if (itemSavePErmission == null) {
            Toast.makeText(getContext(), getString(R.string.error_save_permission), Toast.LENGTH_LONG).show();
        }else {
            dbHelper.addPermission(itemSavePErmission);
            Toast.makeText(getContext(), getString(R.string.save_permission), Toast.LENGTH_LONG).show();
            dialog.dismiss();
        }
    }else {

        ItemsStore itemUpdatePermision = new ItemsStore();
        itemUpdatePermision.setId(intent.getInt(ID_PERMISSION));
        itemUpdatePermision.setNamePermission(namePermission);
        itemUpdatePermision.setNotes(notes);
        boolean isExistForUpdated = dbHelper.isNamePermissioneUsedDailyMovements(intent.getInt(ID_PERMISSION));
        if (isExistForUpdated == true){
            Toast.makeText(getContext(), getString(R.string.this_permission_not_updated), Toast.LENGTH_SHORT).show();
            return;
        }

        if (itemUpdatePermision != null){
            dbHelper.updatePermission(itemUpdatePermision);
            Toast.makeText(getContext(), getString(R.string.update_permission), Toast.LENGTH_LONG).show();
            dialog.dismiss();

        }else {
            Toast.makeText(getContext(), getString(R.string.error_update_permission), Toast.LENGTH_LONG).show();
        }

    } }

【问题讨论】:

    标签: java android


    【解决方案1】:

    使用Sqlitereplace()方法

    db.replace(TABLE_NAME, null, contentValues);
    

    但是您的表应该有uniqueprimary key。而replace 方法将检查是否存在具有给定primary key 的行。如果存在,它将用更新的值替换,如果不存在,它将插入具有给定值的新行。

    查看此tutorial 以了解replace() 方法。

    【讨论】:

    • 这个答案不是真的 replace() 删除记录然后添加记录,我只需要更新记录并保持相同的 id
    • replace 只会在uniqueprimary key 发生冲突时删除。如果您的idprimary key,那么删除和创建新的不会改变您的id
    • 我的朋友这个答案不是解决方案,例如我保存了行名 mohamed 当保存另一行同名时我需要显示消息不保存,因为名称存在,怎么做?
    猜你喜欢
    • 2012-09-25
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多