【问题标题】:How to check duplicates name in android database?如何检查android数据库中的重复名称?
【发布时间】:2012-07-06 07:33:41
【问题描述】:

我想从两个编辑文本中输入姓名和电话号码。我使用两个按钮保存并使用列表视图在模拟器中显示它。输入姓名后,当我点击保存按钮 如何检查我是否已经输入了相同的名称。我是 android 新手,说明会很有帮助。

public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT,"+Key_mobile+" TEXT)");

}

public void n(String aa, String bb) {
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues cv=new ContentValues();
    cv.put(Key_name, aa);
    cv.put(Key_mobile, bb);
    db.insert(tbname, Key_name, cv);

    db.close();

}

public Cursor cr()

{
    SQLiteDatabase db=getReadableDatabase();
    String [] colms=new String[]{Key_id+" as _id",Key_name,Key_mobile};
    Cursor cur=db.query(tbname, colms, null, null, null, null, null);
    cur.moveToFirst();
    return cur;



}

【问题讨论】:

    标签: android database cursor duplicate-data


    【解决方案1】:

    我将首先通过添加 NOT NULL 和 UNIQUE 约束来更改您的表定义。

    db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT NOT NULL UNIQUE,"+Key_mobile+" TEXT)"); 
    

    然后您可以选择用于插入的方法。您可以使用:

    insertOrThrow 将返回您的新记录的 id,或者在错误时返回 -1(并且没有唯一名称的约束失败将是错误)。

    insertWithOnConflict 将返回新记录的 id 或如果输入参数 'conflictAlgorithm' = CONFLICT_IGNORE 或 -1 如果有任何错误,则返回现有行的主键。

    就个人而言,我会使用设置了 CONFLICT_IGNORE 标志的insertWithOnConflict。这样您就可以取回重复记录的行 ID(以及不让重复记录输入)。

    【讨论】:

    • 除了使用 UNIQUE 之外还有其他方法吗...比如比较
    • 这是 UNIQUE 所做的,比较。它是您希望的尽可能简单和最少的代码。您可以在数据库之外进行比较,但工作量是原来的两倍。拉一个游标,进行比较,如果它不存在,请再次访问数据库以插入数据。让数据库为您工作并使用 UNIQUE。
    【解决方案2】:

    UNIQUE 放入表字段定义中,然后使用insertOrThrow。如果插入相同,insertOrThrow会引发异常,可以拦截。

    【讨论】:

    • 插入时你必须精确..我应该在键名 db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT,UNIQUE "+Key_name+" TEXT,"+Key_mobile+" TEXT)");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2012-05-15
    • 2014-07-10
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多