2015-08-26 47 views
-2

我正在使用SQLite来保存联系人,我从服务器检索联系人。如何使SQLite插入功能异常

我就与每个联系人(电话号码)的唯一值的SQLite数据库,你可以在这里看到:

public void onCreate(SQLiteDatabase db) { 

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

     db.execSQL(CREATETABLE); 
    } 

,然后我做了能够插入一个新的联系人功能:

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()); 
    try { 
     db.insert("contacts", // table 
       null, //nullColumnHack 
       values); 
    } catch (Exception e){ 

    } 

    db.close(); 
} 

但是,当我试图插入已插入相同的电话号码,我在日志中得到一个错误,请联系:

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

如何处理该错误并显示例如该联系人已存在的日志消息?

+1

开始做你的异常的东西。你的catch块是空的 – njzk2

+0

请阅读本页:https://www.sqlite.org/lang_conflict.html –

回答

1

第一,作为njzk2说,永远不会离开catch块空

做,将数据库中的手机号码搜索的方法;如果数字存在虚假,否则返回true,然后:

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()); 
    try { 


     if(checkPhoneNumber(contact.getNumero())==false){ 
     db.insert("contacts", // table 
      null, //nullColumnHack 
      values); 


     }else{ 

     // your error message here 

     } 

    } catch (Exception e){ 

    } 

    db.close(); 
} 

方法名称为:checkPhoneNumber

例如:

public boolean checkPhoneNumber(String num) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    String selectQuery = "SELECT * FROM contacts WHERE phone = '" + num+"'"; 

    Cursor c = db.rawQuery(selectQuery, null); 

    if (c != null) 
     return true 

    return false; 
}