首页 > 解决方案 > Flutter 中出现 Sqflite 异常的问题

问题描述

我的代码有问题,我编写了简单的颤振应用程序,它是 f note 应用程序,并且我已经将 SQLite 作为数据库包含在内,我首先通过模拟器运行该应用程序,一切都变得很酷,但是当我尝试运行它时我的真实设备(这是一个 android 设备),数据库没有响应(即我无法向数据库添加新注释),当我返回通过模拟器运行我的应用程序时......应用程序做了同样的事情我发现在我的真实设备和控制台中我发现了这个错误

Error: Can't use 'SqfliteDatabaseException' because it is declared more than once.

我需要帮助请

标签: sqliteflutter

解决方案


我看到了你的代码,问题是你得到的异常可能与这个有关:

PlatformException(sqlite_error, UNIQUE constraint failed: Notetable.id

这是因为您在插入新行时需要管理主键的唯一性。您可以查看这个SO question以获得快速参考。

因此,为了快速使您的代码正常工作,我进行了此更改(请将此代码仅供参考,编写更好的代码):

  void createDataBase(Database db,int newVersion) async{
    await db.execute('CREATE TABLE IF NOT EXISTS $noteTable ($col_id INTEGER PRIMARY KEY ,'+
        '$col_title TEXT , $col_description TEXT , $col_date TEXT,$col_priority INTEGER)');
  }

Future<int> insertData(myNote note)async{
    var mdatabase = await database;
    var _newNoteMap = note.convertToMap();
    _newNoteMap['id'] = null;
    var result = await mdatabase.insert(noteTable, _newNoteMap);
    return result;
}

请注意,即使您更新现有注释,您也始终调用数据库插入。

更新:添加了额外的修改(之前未列出)

databaseObject.dart

Map<String,dynamic> convertToMap(){
    var mapObject = Map<String,dynamic>();

    mapObject["id"]          =    _id;
    mapObject["title"]       =    _title;
    mapObject["description"] =    _description;
    mapObject["date"]        =    _date;
    mapObject["priority"]    =    _priority;

    return mapObject;
  }

Note.dart

if(res >= 1){
        showAlertDialog('Status', "New note added successfully and the value of result is $res");

  }

推荐阅读