Android 如何在SQLite中放置不重复的值&;通道

Android 如何在SQLite中放置不重复的值&;通道,android,sqlite,cursor,Android,Sqlite,Cursor,我的创建表查询是:-- 我正在访问此代码中的值:--- String selectQuery=“SELECT*FROM”+TABLE\u FORWARDMSG; SQLiteDatabase db=this.getReadableDatabase(); Cursor Cursor=db.rawQuery(selectQuery,null); if(cursor.moveToFirst()){ 对于(int i=0;i您的代码看起来不错。也许您不应该将KEY_MSG_DATE设置为UNIQUE。请

我的创建表查询是:--

我正在访问此代码中的值:---

String selectQuery=“SELECT*FROM”+TABLE\u FORWARDMSG;
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){

对于(int i=0;i您的代码看起来不错。也许您不应该将KEY_MSG_DATE设置为UNIQUE。请尝试获取有关您想要执行的操作的更多信息。

您实现的是,在每个列中的每个条目在列中都必须是唯一的,但我假设您想要的是包含列msgBody、msgAddress和msgDate的行必须是be在表中是唯一的

您可以通过将所有列放在UNIQUE子句中来实现这一点:

UNIQUE(msgBody, msgAddress, msgDate) ON CONFLICT REPLACE

请检查这个答案,希望它能帮助你在每次迭代时创建一个新的映射对象,否则你只需重新修改同一个对象。此外,如果你有一个唯一的约束,并尝试多次插入同一行,当然最后只会得到一行。在我的例子中,你的答案的答案是奈克已经
String selectQuery="SELECT * FROM "+TABLE_FORWARDMSG;
     SQLiteDatabase db=this.getReadableDatabase();
 Cursor cursor=db.rawQuery(selectQuery, null);
  if( cursor.moveToFirst()){

        for(int i=0;i<cursor.getCount();i++){
            map.put("msgBody", cursor.getString(1));
            map.put("msgAddress", cursor.getString(2));
            map.put("msgDate", cursor.getString(3));
            user.add(map);
            cursor.moveToNext();

        }

       }
        cursor.close();
        db.close();
UNIQUE(msgBody, msgAddress, msgDate) ON CONFLICT REPLACE