Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 更新时颤振SqfliteDatabaseException_Flutter_Dart_Sqflite - Fatal编程技术网

Flutter 更新时颤振SqfliteDatabaseException

Flutter 更新时颤振SqfliteDatabaseException,flutter,dart,sqflite,Flutter,Dart,Sqflite,我的sqflite数据库有点问题,每当我尝试更新现有记录时,我都会遇到以下错误: 我尝试了同一代码的多个刺激,但以下是我当前的设置: 这是执行代码 var updateDBTask = TaskModel( taskType: 'task', taskCompleted: 'false', datetime: '${DateTime.now()}',

我的sqflite数据库有点问题,每当我尝试更新现有记录时,我都会遇到以下错误:

我尝试了同一代码的多个刺激,但以下是我当前的设置: 这是执行代码

var updateDBTask = TaskModel(
                    taskType: 'task',
                    taskCompleted: 'false',
                    datetime: '${DateTime.now()}',
                    taskPriority:
                        (_newTaskPriority == 0 || _newTaskPriority == null)
                            ? '${widget.previousTaskPriority}'
                            : _newTaskPriority.toString(),
                    datetimedue: '${DateTime.now()}',
                    taskDescription: ('${_newTaskNotes.text}' == '' ||
                            '${_newTaskNotes.text}' == null)
                        ? '${widget.previousTaskDescription}'
                        : '${_newTaskNotes.text}',
                    taskTitle: ('${_newTaskTitle.text}' == '' ||
                            '${_newTaskTitle.text}' == null)
                        ? '${widget.previousTaskTitle}'
                        : '${_newTaskTitle.text}',
                    taskTag: 'defaultTagPOGGEERSWTFJIASJFOIAWJIOj');
                TasksDatabase.db_.updateTask(updateDBTask);
以下是实际更新数据库的代码:

updateTask(updateTask) async {
    var dbClient = await db;
    var result = await dbClient.rawUpdate("UPDATE " +
        TASK_TABLE_NAME +
        " SET ("
            //"id = ${updateTask.datetime}, "
            "tasktype = ${updateTask.taskType}, "
            "tasktitle = ${updateTask.taskTitle}, "
            "taskdescription = ${updateTask.taskDescription}, "
            "taskcompleted = ${updateTask.taskCompleted}, "
            "datetime = ${updateTask.datetime}, "
            "datetimedue = ${updateTask.datetimedue}, "
            "tasktag = ${updateTask.taskTag}, "
            "taskpriority = ${updateTask.taskPriority})");
    return result;
  }

在过去几天中,我一直在关注这个问题,希望您能提供任何帮助。

您的SQL
更新查询无效,在
SET
之后不需要括号,字符串不包含引号(并且事件最坏的情况下在其中有空格,如datetime)。您应该搜索适当的SQL语法(例如:),或者使用
update
而不是
rawUpdate

此外,您不应该像这里所解释的那样将值放入SQL查询中

(作为旁注,您还缺少一个
WHERE
子句,该子句仅更新给定记录的值,此处它更新表中所有记录的值)


SQL是一种语言

我猜task description对SQL字符串将为null我看到taskDescription=,但我不知道为什么,抱歉。尝试修复该问题,如果它为null,不要认为这是问题所在。是否尝试在其上放置硬编码字符串以查看是否有效?尝试过这样做,尝试更新实际数据库时出现问题。我认为问题与sql上的字符串tou“”有关,dbs ofter不接受它,例如tasktitle=hhiuhiuh,应为tasktitle='hhiuh',请尝试检查字符串和日期字段。或者,我认为使用带有args参数的查询比使用rawquery更好。尝试这样做后,我发现出现了
异常。SqfliteDatabaseException(DatabaseException(错误域=FMDatabase Code=1“接近”值):语法错误“UserInfo={NSLocalizedDescription=接近”值:语法错误})sql“更新任务集(id、任务类型、任务标题、任务描述、任务完成、日期时间、日期时间到期、任务标记、任务优先级)值(?,,,,,,,,,,,,,,,,,,,,,?)”参数[2021-05-01 16:42:49.548981,任务,false,2021-05-01 16:42:49.548981,2021-05-01 16:42:49.549727,defaulttagpoggerswtfjiasjfoiawjioj,1]})
// Don't do
await db.rawUpdate('UPDATE MyTable SET Column1 = $val1, Column2 = $val2');

// Instead do:
await db.rawUpdate(
    'UPDATE MyTable SET Column1 = ?, Column2 = ?', [val1, val2]);