2016-09-30 131 views
-1

我怎么能解决这个异常恳求帮我我添加项目到网格视图,但当我点击到最后一项在网格视图此异常出现该项目正确删除,但此异常抛出什么是错在我的代码android SQLiteConstraintException UNIQUE约束失败

public class MyDataBase extends SQLiteOpenHelper { 
private static final int DATABASE_VERSION = 1; 
// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 
// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 
private static final String TABLE_DELETED = "deleted"; 
// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
final String KEY_NAME = "name"; 
private static final String KEY_dID = "did"; 
final String KEY_dNAME = "dname"; 
public MyDataBase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT UNIQUE" 
      + ")"; 
    String CREATE_DELETED_TABLE = "CREATE TABLE " + TABLE_DELETED + "(" 
      + KEY_dID + " INTEGER PRIMARY KEY," + KEY_dNAME + " TEXT UNIQUE" 
      + ")"; 

    db.execSQL(CREATE_CONTACTS_TABLE); 
    db.execSQL(CREATE_DELETED_TABLE); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
} 
public void AddnewContact(photos todo)// this method to add new contact 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, todo.getImage()); 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); 
} 
public void AddnewContactToDeletedTable(photos todo)// this method to add new contact 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_dNAME, todo.getImage()); 
    db.insert(TABLE_DELETED, null, values); 
    db.close(); 
} 
public ArrayList<photos> getallcontacts() { 
    ArrayList<photos> contactList = new ArrayList<photos>(); 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      photos contact = new photos(); 
      contact.setId(Integer.parseInt(cursor.getString(0))); 
      contact.setImage(cursor.getString(1)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 
    // return contact list 
    return contactList; 
} 
public void deleteContact(photos contact) { 
    int id = contact.getId(); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_CONTACTS, KEY_ID 
      + " = " + id, null); 
    db.close(); 
} 

}

android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: contacts.name (code 2067) 
                     at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
                     at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:788) 
                     at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
                     at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
                     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471) 
                     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341) 
                     at com.example.yasser.ahlysc.MyDataBase.AddnewContact(MyDataBase.java:55) 
                     at com.example.yasser.ahlysc.Funny$1.onResponse(Funny.java:59) 
                     at com.example.yasser.ahlysc.Funny$1.onResponse(Funny.java:48) 
                     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
                     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
                     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:211) 
                     at android.app.ActivityThread.main(ActivityThread.java:5389) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) 

回答

2

我觉得你的插入,这就是为什么抛出这个错误,替代的解决方案是可以更换的查询相同的值。

试试下面的代码:

public void AddnewContact(photos todo)// this method to add new contact 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, todo.getImage()); 
    db.replace(TABLE_CONTACTS, null, values); // change this line to your code 
    db.close(); 
} 

替代查询可以处理已存在的数据...

+0

没有解决问题 –

相关问题