Не удалось предотвратить вставку одинаковых данных в Sqlite

#android #database #android-sqlite

#Android #База данных #android-sqlite

Вопрос:

У меня есть приложение, в котором мне нужен один ввод данных только один раз. Я искал решение и применил его, но все равно снова вставил ту же запись данных.

Мой код выглядит следующим образом:

В классе SQLiteHelper (метод Insert):

     public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
  

метод в activity для вставки данных:

 public void DataAdd(String name,String num,int color,int size){
    boolean indata = myhelper.insertData(new ContactModel(name,num,color,size));

    if (indata == true) {
        Toast.makeText(getApplicationContext(),"DataSave",Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(getApplicationContext(),"In Data not True",Toast.LENGTH_SHORT).show();
    }

}
  

Таблица ящиков:

  @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "  Table_name  "(Id INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, NUMBER TEXT, COLOR INTEGER, FSIZE INTEGER) ");

    }
  

Комментарии:

1. Почему вы не используете первичный ключ для этой таблицы?

2. я использую это, вы можете видеть в сейчас, я редактирую сообщение

3. удалите приложение, переустановите приложение и повторите попытку

4. @vasudev все тот же, если у вас есть какой-либо другой способ достижения того же результата, сообщите мне

5. удалите это ContentValues.put(col_0,contactModel.getId()); удалите приложение и запустите приложение

Ответ №1:

когда таблица определения должна использовать первичный ключ для идентификатора :

   private static final String DB_CREATE_MY_TABLE = "CREATE TABLE "   TABLE_NAME   " ( "  
        "  id        INTEGER  PRIMARY KEY ,"  
        "  xofId     INTEGER  NULL,"  
        "  code      INTEGER  NULL"  
        ");";
  

если вы хотите увеличить автоматическое использование идентификатора :

 id INTEGER PRIMARY KEY   AUTOINCREMENT,
  

Комментарии:

1. в вашей деятельности используйте запрос SELECT COUNT(1) FROM table WHERE NAME = name and .... если результат равен нулю, insertData() .

2. и если вы используете АВТОИНКРЕМЕНТ для id, необходимо удалить contentValues.put(col_0,contactModel.getId());