madeeha ameer
madeeha ameer

Reputation: 489

restricting duplicate entries in database android

I know there are a lot of questions regarding restricting duplicate entries in database but i couldn't find a proper answer. This is my sqliteadapter class

 public class SQLiteAdapter {
public static final String MYDATABASE_NAME = "MY_DATABASE";
public static final String MYDATABASE_TABLE = "MY_TABLE";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_CONTENT1 = "Content1";
public static final String KEY_CONTENT2 = "Content2";

//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
 "create table " + MYDATABASE_TABLE + " ("
 + KEY_ID + " integer primary key autoincrement, "
 + KEY_CONTENT1 + " text not null,UNIQUE (KEY_CONTENT1)"
 + KEY_CONTENT2 + " text not null" +
        ");";


private SQLiteHelper sqLiteHelper;
private SQLiteDatabase sqLiteDatabase;

private Context context;

public SQLiteAdapter(Context c){
 context = c;
}

public SQLiteAdapter openToRead() throws android.database.SQLException {
 sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
 sqLiteDatabase = sqLiteHelper.getReadableDatabase();
 return this;
}

public SQLiteAdapter openToWrite() throws android.database.SQLException {
 sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
 sqLiteDatabase = sqLiteHelper.getWritableDatabase();
 return this;
}

public void close(){
 sqLiteHelper.close();
}

public long insert(String content1, String content2){



      ContentValues contentValues = new ContentValues();

      contentValues.put(KEY_CONTENT1, content1);
      contentValues.put(KEY_CONTENT2, content2);
      return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
}

public int deleteAll(){
 return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null);
}

public void delete_byID(int id){
 sqLiteDatabase.delete(MYDATABASE_TABLE, KEY_ID+"="+id, null);
}

public Cursor queueAll(){
 String[] columns = new String[]{KEY_ID, KEY_CONTENT1, KEY_CONTENT2};
 Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,
   null, null, null, null, null);

 return cursor;
}

public class SQLiteHelper extends SQLiteOpenHelper {

 public SQLiteHelper(Context context, String name,
   CursorFactory factory, int version) {
  super(context, name, factory, version);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL(SCRIPT_CREATE_DATABASE);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub

 }

}

}

Before Inserting i want to check that if it is duplicate value(KEY_CONTENT1)then it should not insert. I have tried many things but nothing happened.

Upvotes: 2

Views: 2503

Answers (1)

Flávio Faria
Flávio Faria

Reputation: 6605

Use UNIQUE constraint. By the way, replace:

+ KEY_CONTENT1 + " text not null,UNIQUE (KEY_CONTENT1)"

by

+ KEY_CONTENT1 + " text not null UNIQUE, "

KEY_CONTENT1 is your class member name, it's not a field in your table.

Upvotes: 4

Related Questions