DatabaseException(唯一约束失败:prop_mst.prop_id(代码1555 SQLITE_CONSTRAINT_PRIMARYKEY))

时间:2019-11-20 13:43:32

标签: flutter sqflite

我正在使用DBHelper类,并且在我的其他一个类中调用getter,以便如果DB为null,它将对其进行初始化。 在另一种方法中,我将从其余端点返回的数据插入数据库,并获得上述异常。我想也许是因为唱片已经存在,所以我得到了例外。在那种情况下,我想了解何时创建数据库以及生命周期。大多数情况下,有关sqflite的Web上的所有文章都是基于CRUD操作的。

Future<Database> get db async{
    if(_db == null){
        _db = await initializeDb();
    }
    return _db;
  }



Future<Database> initializeDb() async{
    Directory dir = await path_pro.getApplicationDocumentsDirectory();
    String path = dir.path + 'csr';
    var dbCsr = await openDatabase(path, version: 1, onCreate: _createDb);
    return dbCsr;
  }
  void _createDb(Database db, int newVersion) async{
    await db.execute(
      "CREATE TABLE $tblName($colPropId INTEGER PRIMARY KEY, $colCityName TEXT, $colPropName TEXT, $colPropAddr TEXT)"
    );
  }
  Future<int> insertProp(Map<String, dynamic> map) async{
    Database db = await this.db;
    var result = await db.insert(tblName, map);
    return result;
  }

在我的另一堂课中,我称其为:

DBHelper().db

DBHelper().insertProp(element[i]);

谢谢

1 个答案:

答案 0 :(得分:0)

在我的DBHelper类的insert方法中,我首先使用一个选择查询来检查是否有条目...如果存在,我将其更新,否则将其插入数据库中。

Future<int> insertProp(Map<String, dynamic> map) async{
    var result;
    Database db = await this.db;
    var count = Sqflite.firstIntValue(await db.rawQuery('SELECT COUNT(*) from 
                $tblName WHERE $colPropId = ? ', [map['prop_id']]));
    if(count == 0){
      result = await db.insert(tblName, map);
    }else{
       await db.update(tblName, map, where: '$colPropId = ?', whereArgs: 
      [map['prop_id']]);
    }
    return result;
  }

谢谢