2015-11-14 102 views
0

我在我的應用程序中有以下插入語句工作。
在插入之前,如果值名稱不存在於名稱列中,我想首先檢查數據庫。
如果它不存在,我想繼續插入,否則顯示一條錯誤消息。SQLite中的查詢

我如何將它整合到我現有的聲明中?

public void insert(HashMap<String, String> queryValues){ 

    SQLiteDatabase database = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    Cursor c = database.query("SELECT * FROM user_details where" + "name=?", new String[] {values.put("name") }); 

    if (c.getCount() > 0) { 
     // don't do it 
     return; 
    } 


else { 
    values.put("name", queryValues.get("name")); 
    values.put("age", queryValues.get("age")); 

    database.insert("user", null, values); 
    } 
    database.close(); 

} 

回答

0

正確的方式做,這是添加上的名稱字段unique約束,然後用insertWithOnConflict()CONFLICT_FAIL最後的說法。這實際上是默認行爲。如果否則會導致違反約束(insert()將返回-1),您的插入將失敗。

如果你不想這樣做,那就沒有魔法了。使用給定名稱字段查詢您的數據庫中的行。如果返回> 0行,請不要執行插入操作。

Cursor c = db.query(..., "name=?", new String[] {theName}, ...); 
if (c.getCount > 0) { 
    // don't do it 
    return; 
} 
+0

非常感謝你,我編輯了我的代碼,但是select語句似乎有些問題。 –

+0

我沒有給出select的確切語法。有關詳細信息,請參閱Android SDK參考。 –