【问题标题】:Couldn't able to prevent insert same data into Sqlite无法阻止将相同的数据插入 Sqlite
【发布时间】:2019-03-04 07:32:21
【问题描述】:

我有一个应用程序,其中我只需要一次数据输入。我确实搜索了解决方案并应用了它,但仍然再次插入相同的数据记录。

我的代码如下:

在 SqliteHelper 类中(插入方法):

    public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }

activity中插入数据的方法:

public void DataAdd(String name,String num,int color,int size){
    boolean indata = myhelper.insertData(new ContactModel(name,num,color,size));

    if (indata == true) {
        Toast.makeText(getApplicationContext(),"DataSave",Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(getApplicationContext(),"In Data not True",Toast.LENGTH_SHORT).show();
    }

}

板条箱:

 @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "+ Table_name +"(Id INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, NUMBER TEXT, COLOR INTEGER, FSIZE INTEGER) ");

    }

【问题讨论】:

  • 你为什么不用那个表的主键?
  • 我正在使用它,你现在可以看到,我编辑帖子
  • 卸载应用并重新安装应用并重试
  • @vasudev 还是一样,如果你有任何其他方法可以达到相同的结果,请告诉我
  • 删除此内容Values.put(col_0,contactModel.getId());卸载应用并运行应用

标签: android database android-sqlite


【解决方案1】:

当定义表必须使用主键作为id时:

  private static final String DB_CREATE_MY_TABLE = "CREATE TABLE " + TABLE_NAME + " ( " +
        "  id        INTEGER  PRIMARY KEY ," +
        "  xofId     INTEGER  NULL," +
        "  code      INTEGER  NULL" +
        ");";

如果你想增加 id 自动使用:

id INTEGER PRIMARY KEY   AUTOINCREMENT,

【讨论】:

  • 在您的活动中使用查询 SELECT COUNT(1) FROM table WHERE NAME = name and .... 如果结果为零,则 insertData()。
  • 如果您使用 AUTOINCREMENT 作为 id 必须删除 contentValues.put(col_0,contactModel.getId());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多