如何删除sqlitedatabase中的重复值?

时间:2018-08-19 19:58:18

标签: android android-studio

我正在开发一个iun,它从firebase上载并检索数据,然后取回它,将其存储在Sqlite数据库中,但是在每次插入时都存储在sqlitedatabase中,重复值插入Sqlitedatabase中  如何在插入之前忽略重复值,以便解决此问题。

public static final int DB_VERSION =1;

public static String getDataBASE_NAME() {
    return DataBASE_NAME;
}

public static void setDataBASE_NAME(String dataBASE_NAME) {
    DataBASE_NAME = dataBASE_NAME;
}

public static  String DataBASE_NAME;


Context context;




private static final String SQL_CREATE_ENTRIES =
        "CREATE TABLE " + DocumentsReader.FeedEntry.TABLE_NAME + "(" +
                DocumentsReader.FeedEntry._ID + " INTEGER PRIMARY KEY," +
                DocumentsReader.FeedEntry.COLUMNS_TITLE + " TEXT," +
                DocumentsReader.FeedEntry.COLUMN_SUB_TITLE + " TEXT)";



private static final String SQL_DELETE_ENTRIES =
        "DROP TABLE IF EXISTS " +DocumentsReader.FeedEntry.TABLE_NAME;




public DocumentsDatabaseHelper(Context context) {
    super(context, DocumentsDatabaseHelper.getDataBASE_NAME(), null, DB_VERSION);


    this.context =context;


}


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL(SQL_CREATE_ENTRIES);



}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    sqLiteDatabase.execSQL(SQL_DELETE_ENTRIES);
    onCreate(sqLiteDatabase);

}

//在sqlitedatabase android studio中添加值的方法

  public void addDocuments(String name , String Uri, DocumentsDatabaseHelper documentsDatabaseHelper){

       SQLiteDatabase db= documentsDatabaseHelper.getWritableDatabase();
       ContentValues values =new ContentValues();
       values.put(DocumentsReader.FeedEntry.COLUMNS_TITLE,name);
      values.put(DocumentsReader.FeedEntry.COLUMN_SUB_TITLE,Uri);


          long rows=   db.insertWithOnConflict(DocumentsReader.FeedEntry.TABLE_NAME,null ,values,SQLiteDatabase.CONFLICT_REPLACE);

          if(rows==-1){


              Toast.makeText(context,"not inserted", Toast.LENGTH_SHORT).show();

          }
          else{
              Toast.makeText(context, String.valueOf(rows)+"inserted", Toast.LENGTH_SHORT).show();


          } }

2 个答案:

答案 0 :(得分:1)

您必须在表的ConstPtr a(shared_from_this());语句中使用UNIQUE来标识您不想具有重复值的列。因此,如果您想将此属性应用于列CREATE,请使用以下命令:

DocumentsReader.FeedEntry.COLUMNS_TITLE

进行此更改后,您需要从要对其进行测试的设备/仿真器中卸载该应用,然后重新运行以重新创建数据库。

答案 1 :(得分:1)

Sqlite文档指出,如果主键是整数,则如果未显式插入主键,它将在每个新条目上自动递增。

现在,由于您没有在插入语句中显式设置ID,因此每次插入都会生成一个新ID,从而使每一行都被视为新行。

为避免这种情况,请在您的简历中明确输入ID,或者在符合您逻辑的情况下在其中一列中添加唯一性这样的约束...(例如,名称的唯一性可能不是逻辑上的,而是唯一的说护照可能是)