2015-11-14 142 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参考。 –