Only allow unique data entry with Android SQLite?

19,061

Add the unique keyword to the column.

db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT unique);
Share:
19,061
Broak
Author by

Broak

Prolific Android developer and designer, I develop my own apps, am available for freelance and dabble in some blogging. Contact: [email protected] Website: www.BroakenMedia.co.uk

Updated on June 05, 2022

Comments

  • Broak
    Broak almost 2 years

    Before I get into describing by problem I'd like to point out I am aware of the other threads asking this question, however none for me have been able to solve my issue.

    I've been working on a sharing app using the BumpAPI, which upon receiving the chunk, saves it to an SQLite database for retrieval in a list view activity, this is all working fine and the data is saved, however if the same text is sent twice it will be saved again and again and the list view will show this, from what I've read I need the 'UNIQUE' identifier? however being completely new to SQL I am at a loss with regards to achieving this, here is my DataHelper class which im using to create and add the entries, would anyone be kind enough to modify it or inform me of a possible solution?

    Thanks very much

        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);
          }
       }
    }
    
  • Broak
    Broak over 12 years
    That does not seem to be working, if i view the SQL database it has repeat entry's again, hm
  • Broak
    Broak over 12 years
    Sorted it out myself in the end! Shame noone even attempted to help answer, but hey, heres the solution if anyone needs it: db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT unique);