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