在将数据插入sqlite数据库时如何避免重复值?

我正在尝试避免将重复值插入android sqlite中,但由于我是android sqlite的新手,我无法弄清避免插入重复值的方法是什么。我试图在线查找解决方案,但我没有得到满意的答复。 请帮我解决这个问题。

下面给出了我的代码。

#我的Mainactivity代码:

public class Mainactivity extends AppCompatactivity implements View.OnClicklistener {

    private EditText nameEditText,ageEditText,genderEditText;

    MyDatabaseHelper myDatabaseHelper;

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

        nameEditText = findViewById(R.id.nameEditTextId);
        ageEditText = findViewById(R.id.ageEditTextId);
        genderEditText = findViewById(R.id.genderEditTextId);
        Button addButton = findViewById(R.id.addButtonId);

        myDatabaseHelper = new MyDatabaseHelper(this);


        addButton.setOnClicklistener(this);
    }

    @Override
    public void onClick(View view) {

        String name = nameEditText.getText().toString();
        String age = ageEditText.getText().toString();
        String gender = genderEditText.getText().toString();

        if (view.getId() == R.id.addButtonId) {

            if(TextUtils.isEmpty(name) && TextUtils.isEmpty(age) && TextUtils.isEmpty(gender) ){

                Toast.makeText(getapplicationContext(),"Enter details and submit ",Toast.LENGTH_LONG).show();

            }

            else if (TextUtils.isEmpty(name)) {

                Toast.makeText(getapplicationContext(),"Insert the name first ",Toast.LENGTH_LONG).show();

            }else if ( TextUtils.isEmpty(age)){

                Toast.makeText(getapplicationContext(),"Insert an age ",Toast.LENGTH_LONG).show();


            }else if (TextUtils.isEmpty(gender)){

                Toast.makeText(getapplicationContext(),"Insert the gender ",Toast.LENGTH_LONG).show();

            }else {

                long rowId = myDatabaseHelper.insertData(name,age,gender);

                if (rowId == -1) {
                    Toast.makeText(getapplicationContext(),"unsuccessfull ",Toast.LENGTH_LONG).show();

                } else {
                    Toast.makeText(getapplicationContext(),"Row " + rowId + " is sucessfully inserted ",Toast.LENGTH_LONG).show();

                }

                //clear screen after inserting value;
                nameEditText.setText("");
                ageEditText.setText("");
                genderEditText.setText("");


            }


        }

    }

}

我的MyDataBaseHelper代码:

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final  String DATABASE_NAME = "Student.db";
    private static final String TABLE_NAME = "student_details";
    private static final String ID = "_id";
    private static final String NAME = "Name";
    private static final String AGE = "Age";
    private static final String GENDER = "Gender";
    private static final int VERSION_NUMber = 3 ;
    private static final String CREATE_TABLE = "CREATE TABLE  "+TABLE_NAME+" ("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+NAME+" VARCHAR(255),"+AGE+" INTEGER,"+GENDER+"); ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    private Context context;

    MyDatabaseHelper(@Nullable Context context) {
        super(context,DATABASE_NAME,null,VERSION_NUMber);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        try {
            Toast.makeText(context,"onCreate is called  ",Toast.LENGTH_LONG).show();

            sqLiteDatabase.execSQL( CREATE_TABLE);
        }catch (Exception e){

            Toast.makeText(context,"Exceptin : " +e,Toast.LENGTH_LONG).show();

        }



    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase,int i,int i1) {

        try {
            Toast.makeText(context,"onUpgrade is called ",Toast.LENGTH_LONG).show();
            sqLiteDatabase.execSQL(DROP_TABLE);
            onCreate(sqLiteDatabase);
        }catch (Exception e){
            Toast.makeText(context,Toast.LENGTH_LONG).show();
        }


    }
    long insertData(String name,String age,String gender){

        SQLiteDatabase sqLiteDatabase = this.getwritabledatabase();
        Contentvalues contentvalues = new Contentvalues();
        contentvalues.put(NAME,name);
        contentvalues.put(AGE,age);
        contentvalues.put(GENDER,gender);

        return sqLiteDatabase.insert(TABLE_NAME,contentvalues);
    }
}
ruby19830501 回答:在将数据插入sqlite数据库时如何避免重复值?

我不知道是否有简单的方法可以做到这一点,但我有想法可能会有所帮助, 为什么不创建另一列以合并要防止它们重复的值,并在添加任何新行之前进行检查 您可以将此答案单独保存,直到找到最佳做法

,

为表NameAgeGender的组合向表中添加一个UNIQUE constraint
将您的CREATE语句更改为此:

private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
        ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
        NAME + " TEXT," +
        AGE + " INTEGER,"+
        GENDER + " TEXT," +
        "UNIQUE(" + NAME + "," + AGE + ","  + GENDER + ")" +
        ");";

如果您只希望Name是唯一的:

private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
        ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
        NAME + " TEXT UNIQUE,"+
        GENDER + " TEXT +
        ");";

如果您尝试插入副本,则insert()方法将返回-1

本文链接:https://www.f2er.com/3142623.html

大家都在问