2015-04-07 40 views
0

我试图插入行DB如果不通过电子邮件存在:插入到DB,如果不存在

public boolean AddUserIfNotExist(String email, String password, String username) { 

    SQLiteDatabase db = m_helper.getWritableDatabase(); 


    //String Query = "INSERT OR IGNORE INTO USERS(email, password, username) 
    //values('" + email + "','" + password + "','" + username + "');"; 

    String Query = "INSERT INTO USERS(email, password, username) " + 
      "SELECT '" + email + "','" + password + "','" + username + "' " 
      + "WHERE NOT EXISTS(SELECT 1 FROM USERS WHERE email = '" + email + "');"; 

    Cursor cursor = db.rawQuery(Query, null); 

    if(cursor.getCount() <= 0) { 
     return false; 
    } 
    return true; 
} 

为什么它不工作? cursor.getCount总是返回false。

回答

1

INSERT语句不返回任何行,因此您不能使用rawQuery;对于INSERT,您必须改用execSQL

如果要确定是否存在的记录或没有,只是做了单独(也使用的参数,以避免字符串格式化的问题):

if (DatabaseUtils.queryNumEntries(db, "Users", 
            "email = ?", new String[] { email })) > 0) { 
    // probably UPDATE? 
    return true; 
} else { 
    db.execSQL("INSERT INTO Users(email, password, username) VALUES(?,?,?)", 
       new Object[] { email, password, username }); 
    return false; 
} 
+0

queryNumEntries并不像选择查询?如果答案是肯定的,向数据库发出两个请求是否无效? 我试图将它写入一个查询中,以便使其具有一个请求。 –

+1

你为什么认为这两个请求效率不高?没有客户端/服务器通信开销。你测量过了吗? –