flutter - DatabaseException(唯一约束失败:prop_mst.prop_id(代码 1555 SQLITE_CONSTRAINT_PRIMARYKEY))
问题描述
我正在使用 DBHelper 类,并且在我的其他类之一中调用 getter,以便如果 DB 为空,它会对其进行初始化。在另一种方法中,我将从休息端点返回的数据插入数据库并获得上述异常。我想也许因为记录已经存在,我得到了例外。在那种情况下,我想了解数据库何时创建以及生命周期。大多数网络上关于 sqflite 的文章都是基于 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]);
谢谢
解决方案
在插入方法中的 DBHelper 类中,我首先使用选择查询来检查是否有条目...如果存在我更新它,如果没有我插入到数据库中。
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;
}
谢谢大家
推荐阅读
- android - Flutter - 自动滚动到特定卡片
- swift - SwiftUI - macOS Big Sur - 如何将 ToolbarItem 移动到相应的右视图
- java - 如何在 Scala 中创建由 Set 支持的地图?
- python-3.x - 当我在 cx_freeze 'TypeError: expected str, bytes or os.PathLike object, not NoneType' 上运行 setup.py 时出现错误
- c - 当我不使用 scanf 时,我一定要使用“putch”功能吗?
- php - 我的程序需要填写所有标准,而不是选择用户想要多少标准
- oracle - oracle 中的 XMLType 不会为具有 Null 值的列生成标签
- python - python爬取以提取评论计数
- firebase - 如何在 Firebase 身份验证中限制电子邮件域
- google-cloud-platform - 定期自动执行 Colab 笔记本