防止SQLite Android中的重复数据
我正在使用Sqlite在登录后保存一个google帐户,我想在我点击两次save按钮时防止重复。我在这里搜索并使用了防止SQLite Android中的重复数据,android,android-sqlite,Android,Android Sqlite,我正在使用Sqlite在登录后保存一个google帐户,我想在我点击两次save按钮时防止重复。我在这里搜索并使用了insertWithOnConflict,但仍然不起作用。我想是因为我的ID是自动递增的。那我该怎么办呢 DBHelper.java public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "Account"; private static final Strin
insertWithOnConflict
,但仍然不起作用。我想是因为我的ID是自动递增的。那我该怎么办呢
DBHelper.java
public class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "Account";
private static final String TABLE_NAME = "User";
private static final String ID = "Id";
private static final String Name = "name";
private static final String Email = "email";
private static final String Avatar = "avatar";
private static final String UserId = "userid";
private static final String TokenId = "tokenid";
private String SQLQuery = "CREATE TABLE " +TABLE_NAME+" ("+
ID +" integer primary key, "+
Name + " TEXT, "+
Email + " TEXT, "+
Avatar + " TEXT, "+
UserId + " TEXT, "+
TokenId + " TEXT)";
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(SQLQuery);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public void addUser(User user) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(Name, user.getmName());
values.put(Email, user.getmEmail());
values.put(Avatar, user.getmAvatar());
values.put(UserId, user.getmUserID());
values.put(TokenId, user.getmTokenID());
db.insertWithOnConflict(TABLE_NAME, null, values,SQLiteDatabase.CONFLICT_REPLACE);
db.close();
}
第一个解决方案,您可以使用
选择
,检查数据库中是否存在行,然后使用更新
查询编辑数据库中的数据。相反,您将使用INSERT
将数据插入数据库。第二个解决方案是,您可以使用一些SQLite库,例如DBFlow、GreenDAO等。然后使用。使用相同的函数保存方法。在防止重复数据之前,您必须定义“唯一性”。在你的情况下,我猜是电子邮件
即使使用insertWithOnConflict
插入数据,在创建表时,也没有指定哪个列是唯一的。默认情况下,它将是自动递增的主键,因此插入的每个记录都是一个新的。
例如(在email
列上):
private String SQLQuery = "CREATE TABLE " +TABLE_NAME+" ("+
ID +" integer primary key, "+
Name + " TEXT, "+
Email + " TEXT UNIQUE, "+
Avatar + " TEXT, "+
UserId + " TEXT, "+
TokenId + " TEXT)";