Разрешить только уникальную запись данных с Android SQLite?

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

Я работаю над приложением совместного использования, используя BumpAPI, который после получения фрагмента сохраняет его в базу данных SQLite для извлечения в режиме просмотра списка, все это прекрасно работает, и данные сохраняются, однако, если тот же текст отправляется дважды, он будет сохранен снова и снова, и представление списка покажет это, из того, что я прочитал, мне нужен идентификатор "UNIQUE"? однако, будучи совершенно новым для SQL, я не понимаю, что касается этого, вот мой класс DataHelper, который им можно использовать для создания и добавления записей, будет ли кто-нибудь достаточно любезен, чтобы изменить его или сообщить мне о возможном решении?

Большое спасибо

    public class DataHelper {

   private static final String DATABASE_NAME = "tags.db";
   private static final int DATABASE_VERSION = 1;
   private static final String TABLE_NAME = "TagTable";

   private Context context;
   private SQLiteDatabase db;

   private SQLiteStatement insertStmt;
   private static final String INSERT = "insert into "
      + TABLE_NAME + "(name) values (?)";

   public DataHelper(Context context) {
      this.context = context;
      OpenHelper openHelper = new OpenHelper(this.context);
      this.db = openHelper.getWritableDatabase();
      this.insertStmt = this.db.compileStatement(INSERT);
   }

   public long insert(String name) {
      this.insertStmt.bindString(1, name);
      return this.insertStmt.executeInsert();

   }



   public void deleteAll() {
      this.db.delete(TABLE_NAME, null, null);
   }

   public List<String> selectAll() {
      List<String> list = new ArrayList<String>();
      Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" }, 
        null, null, null, null, "name desc");
      if (cursor.moveToFirst()) {
         do {
            list.add(cursor.getString(0)); 
         } while (cursor.moveToNext());
      }
      if (cursor != null && !cursor.isClosed()) {
         cursor.close();
      }
      return list;
   }

   private static class OpenHelper extends SQLiteOpenHelper {

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

      @Override
      public void onCreate(SQLiteDatabase db) {
         db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name    TEXT)" + "text unique, " + "ON CONFLICT REPLACE");
      }

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

Ответы

Ответ 1

Добавьте ключевое слово unique в столбец.

db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT unique);

Ответ 2

похоже, что вы должны сначала добавить уникальный индекс в инструкцию Создать таблицу

db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name    TEXT)" + "**name**    unique, " + "ON CONFLICT REPLACE");

это предотвратит наличие двух записей с одинаковыми именами

второй, вы можете сделать выбор, чтобы проверить наличие данных, прежде чем вставлять