【问题标题】:Insert to DB if not exist如果不存在则插入数据库
【发布时间】:2015-04-07 21:07:20
【问题描述】:

如果通过电子邮件不存在,我尝试将行插入数据库:

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。

【问题讨论】:

    标签: java sqlite android-studio


    【解决方案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;
    }
    

    【讨论】:

    • queryNumEntries 不像选择查询?如果答案是肯定的,那么向 DB 发出两次请求是否无效?我试图在一个查询中编写它,以便通过一个请求来实现。
    • 为什么你认为这两个请求效率低?没有客户端/服务器通信开销。你测量了吗?
    猜你喜欢
    • 2017-04-24
    • 2020-06-17
    • 2016-11-19
    • 1970-01-01
    • 2019-11-17
    • 2013-11-15
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多