避免SQLite中的重复条目

时间:2015-07-06 12:22:56

标签: android sqlite

我正在android中编写一个小应用程序来存储有关使用SQLite的人的基本细节。

我使用此功能

插入数据
public void insertData(String user,String p_no,SQLiteDatabase db)
    {         
            ContentValues cv = new ContentValues();
            cv.put(NAME, user);
            cv.put(PHONE, p_no);
            db.insert("MYTABLE", null, cv);
    }

上述功能允许存储重复的名称。

所以我编写了一个函数,首先检查名称是否退出然后输入。

public void insertData(String user,String p_no,SQLiteDatabase db)
    {
        Cursor resultSet=db.rawQuery("select NAME from MYTABLE where NAME = '"+user+"'",null);
        if(resultSet==null)
        {
            ContentValues cv = new ContentValues();
            cv.put(NAME, user);
            cv.put(PHONE, p_no);
            db.insert("MYTABLE", null, cv);
        }
        else Toast.makeText(context,user+" already exists",Toast.LENGTH_SHORT).show();
    }

但问题是现在每次插入含义时吐司都会出现,即使该行是唯一的,也没有插入。

为什么即使没有这样的行,resultSet也不为空?

3 个答案:

答案 0 :(得分:3)

这是因为RawQuery永远不会返回null游标,这就是你的检查标准,所以它总是失败,并试图在DB中添加新值。 我无法找到我学到的文档,但我会尽快更新。

您可以使用

检查cursor中是否包含值
if(cursor.moveToFirst())

答案 1 :(得分:1)

因为可以有一个空光标。更改您的支票

if(cursor.getCount() == 0)

这样,如果游标不为null,则检查它是否包含某些内容。

在我看来,这可能不是处理重复的最好方法。您应该将列标记为unique,然后使用insertWithConflict来决定在您已经拥有该值的条目时该怎么做

答案 2 :(得分:0)

检查

if (resultset.getCount() == 0) 

此外,将Name设置为唯一键以避免重复。而不是每次都检查它。