登录后,我正在使用Sqlite保存一个Google帐户,我想防止重复单击两次“保存”按钮。我在这里搜索并使用了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();
}
答案 0 :(得分:0)
第一个解决方法是,可以使用SELECT
,检查数据库中是否存在行,然后将使用UPDATE
查询来编辑数据库中的数据。相反,您将使用INSERT
将数据插入数据库。第二个解决方法是,您可以使用一些库SQLite,例如然后,DBFlow,GreenDAO等使用具有相同功能的.save
方法。
答案 1 :(得分:0)
在防止重复数据之前,您必须定义“唯一性”。就您而言,我猜是email
。
即使使用insertWithOnConflict
插入了数据,在创建表时,也没有指定哪一列是UNIQUE
。默认情况下,它将是您的自动增量主键,因此插入的每个记录都是一个新的。
一个示例可能像(在email
列上):
private String SQLQuery = "CREATE TABLE " +TABLE_NAME+" ("+
ID +" integer primary key, "+
Name + " TEXT, "+
Email + " TEXT UNIQUE, "+
Avatar + " TEXT, "+
UserId + " TEXT, "+
TokenId + " TEXT)";