防止在Sqlite Android中插入重复数据

时间:2015-11-11 20:09:44

标签: android sqlite

我想阻止在SQLite中插入重复的行,因为我使用了一个唯一的属性:

 @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATETABLE = "CREATE TABLE contacts ( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "name TEXT, "+
                "profil TEXT, "+
                "phone TEXT UNIQUE ,"+
                "blocked TEXT, "+
                "show TEXT , "+
                "objectid TEXT )";

        db.execSQL(CREATETABLE);
    }

但是当我用同一部手机插入一行时,我的错误出现在Log:

E/SQLiteLog: (2067) abort at 17 in [INSERT INTO contacts(phone,name,blocked,objectid,show,profil) VALUES (?,?,?,?,?,?)]: UNIQUE constraint failed: contacts.phone

那是不是很好,有什么方法可以阻止它吗?

 public void addcontact(contacts contact){



        SQLiteDatabase db = this.getWritableDatabase();


        ContentValues values = new ContentValues();
        values.put("name", contact.getName());
        values.put("phone", contact.getNumero());
        values.put("profil", contact.getProfil());
        values.put("show", contact.getShow());
        values.put("blocked", contact.getBlocked());
        values.put("objectid", contact.getObjectid());



        try {
            db.insertOrThrow("contacts",
                    null,
                    values);
        } catch(SQLiteException e) {
            Log.d("My App", "caught");

        }
        //db.close();
    }

1 个答案:

答案 0 :(得分:2)

如果您只想防止错误,并且如果唯一值已经存在则无效,则使用...

insertWithOnConflict (String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)

...并使用DateBean作为CONFILCT_IGNORE参数。

如果您确实想要更新已存在的行,则可以使用与conflictAlgorithm相同的方法。