插入前如何检查行是否存在?

时间:2019-04-20 13:49:18

标签: java android database sqlite

我想将记录插入到sqllite数据库中,但是在插入之前,我必须检查记录是否存在。

我使用了这段代码,但是尽管记录存在,但仍然没有说出这样的列并停止工作。

SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = " + name+";";

    Log.e(LOG, selectQuery);

    Cursor c = db.rawQuery(selectQuery, null);

    if (c != null) {
         return true;
    }
    return false;

2 个答案:

答案 0 :(得分:0)

这是使用rawQuery()的推荐方式:

String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE " + TEAM_TABLE_NAME + " = ?";
Cursor c = db.rawQuery(selectQuery, new String[] {name});

因此您将name作为参数传递给查询,并避免了sql injection的风险。

在您的代码中,您仅检查Cursor对象是否为null,而不检查它是否包含正确的行。
因此,像这样返回getCount() > 0的结果:

return c.getCount() > 0;

如果该名称已存在于表中,它将返回true

至于no such column错误,则有所不同。
首先,请确保TEAM_TABLE_NAME是该列的正确名称,如果正确,则可能是您对列名称所做的更改未反映到数据库中。
因此,请从设备上卸载应用程序,以便删除数据库,然后重新运行以使用列的新名称重新创建数据库。

答案 1 :(得分:0)

字符串必须放入'' 因此,替换

 String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = " + name+";"

使用

   replace  String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = \'" + name+"\';"