2012-07-05 182 views
1

我想輸入姓名和電話號碼從兩個編輯text.i使用兩個按鈕來保存和顯示在模擬器使用列表視圖。輸入名稱後,當我點擊保存按鈕如何檢查我是否已經進入相同名稱。我是新來的android解釋將非常有幫助。如何檢查Android數據庫中的重複名稱?

public void onCreate(SQLiteDatabase db) { 

    db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT,"+Key_mobile+" TEXT)"); 

} 

public void n(String aa, String bb) { 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put(Key_name, aa); 
    cv.put(Key_mobile, bb); 
    db.insert(tbname, Key_name, cv); 

    db.close(); 

} 

public Cursor cr() 

{ 
    SQLiteDatabase db=getReadableDatabase(); 
    String [] colms=new String[]{Key_id+" as _id",Key_name,Key_mobile}; 
    Cursor cur=db.query(tbname, colms, null, null, null, null, null); 
    cur.moveToFirst(); 
    return cur; 



} 

回答

0

UNIQUE您的表字段定義的,然後使用insertOrThrow。如果插入相同,insertOrThrow將導致異常,您可以截取它。

+0

同時插入你有,我應該插入鍵名 db.execSQL之前UNIQUE被precise..where( 「CREATE TABLE 」+ tbname +「(」 + KEY_ID + 「INTEGER PRIMARY KEY AUTOINCREMENT,獨特的 」+ KEY_NAME +「 TEXT」 + Key_mobile +「TEXT)」); – zyonneo 2012-07-06 02:46:11

2

我會開始通過添加NOT NULL和UNIQUE約束來更改您的表定義。

db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT NOT NULL UNIQUE,"+Key_mobile+" TEXT)"); 

然後您可以選擇插入方法。您可以使用:

insertOrThrow將返回您的新記錄的ID,或-1上的一個錯誤(並且沒有唯一名稱的約束失敗將是一個錯誤)。

insertWithOnConflict將返回新記錄的ID或現有行的主鍵如果輸入參數'conflictAlgorithm'= CONFLICT_IGNORE或-1(如果有任何錯誤)。

就個人而言,我會使用insertWithOnConflict與CONFLICT_IGNORE標誌設置。這樣你可以得到重複記錄的行標識(以及不讓重複輸入)。

+0

除了使用UNIQUE之外,有沒有其他的方法...比較 – zyonneo 2012-07-08 20:40:43

+0

這就是UNIQUE所做的比較。它就像你所希望的那樣簡單和最小的代碼。你可以在數據庫外進行比較,但這是工作的兩倍。拉一個光標,做比較,如果沒有再次訪問數據庫插入數據。讓DB爲你工作並使用UNIQUE。 – Barak 2012-07-08 21:27:13