我正在开发一个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();
} }
答案 0 :(得分:1)
您必须在表的ConstPtr a(shared_from_this());
语句中使用UNIQUE
来标识您不想具有重复值的列。因此,如果您想将此属性应用于列CREATE
,请使用以下命令:
DocumentsReader.FeedEntry.COLUMNS_TITLE
进行此更改后,您需要从要对其进行测试的设备/仿真器中卸载该应用,然后重新运行以重新创建数据库。
答案 1 :(得分:1)
Sqlite文档指出,如果主键是整数,则如果未显式插入主键,它将在每个新条目上自动递增。
现在,由于您没有在插入语句中显式设置ID,因此每次插入都会生成一个新ID,从而使每一行都被视为新行。
为避免这种情况,请在您的简历中明确输入ID,或者在符合您逻辑的情况下在其中一列中添加唯一性这样的约束...(例如,名称的唯一性可能不是逻辑上的,而是唯一的说护照可能是)