Flutter SQLite 语法错误靠近 TEXT 小数点

Posted

技术标签:

【中文标题】Flutter SQLite 语法错误靠近 TEXT 小数点【英文标题】:Flutter SQLite Syntax Error near TEXT decimal point 【发布时间】:2021-10-29 19:16:21 【问题描述】:

我似乎无法弄清楚这个语法错误是什么,我已经为 mac 和图像字段尝试了 TEXT 和 BLOB,但似乎没有任何效果。请帮忙!

customQuery("CREATE TABLE Profile ("
    "mac TEXT,"
    "image TEXT,"
    "name TEXT,"
    "age INT,"
    "nationality TEXT,"
    "profession TEXT,"
    "about TEXT"
    ")");

onPressed: () 
        profile.add(Profile(
            mac: _platformVersion,
            image: imagePath,
            name: nameController.text,
            age: ageController.text,
            nationality: nationalityController.text,
            profession: professionController.text,
            about: aboutController.text));

        DBProvider.db.customQuery("INSERT Into Profile (mac,image,name,age,nationality,profession,about)"
            " VALUES ($profile[0].mac,$profile[0].image,"
            "$profile[0].name,$profile[0].age,$profile[0].nationality,"
            "$profile[0].profession,$profile[0].about);");
           ,

&这是错误

    E/SQLiteLog( 4520): (1) near ".0": syntax error in "INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES (0.0.0.0.0.0,/data/user/0/com.test.fltestar/cache/scaled_image_picker3315305739073272987.jpg,test,35,test
E/flutter ( 4520): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: DatabaseException(near ".0": syntax error (code 1 SQLITE_ERROR): , while compiling: INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES (0.0.0.0.0.0,/data/user/0/com.test.test/cache/scaled_image_picker3315305739073272987.jpg,test,35,test,test,test);) sql 'INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES (0.0.0.0.0.0,/data/user/0/com.test.test/cache/scaled_image_picker3315305739073272987.jpg,test,35,test,test,test);' args []

【问题讨论】:

【参考方案1】:

事实上,INSERT 语法是错误的。 这是您的实际语法:

INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES (0.0.0.0.0.0,/data/user/0/com.test.fltestar/cache/scaled_image_picker3315305739073272987.jpg,test,35,test,test,test);

但这些值并不是所有 TEXT 字段的值都表示为 TEXT。应该是这样的:

INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES ('0.0.0.0.0.0','/data/user/0/com.test.fltestar/cache/scaled_image_picker3315305739073272987.jpg','test',35,'test','test','test');

另外,我建议您使用 moor 之类的库,这对您有很大帮助。

【讨论】:

非常感谢@Gregorio!那是一个愚蠢的错误。但现在我得到这个错误: E/SQLiteLog(4520): (20) statement aborts at 5: E/SQLiteQuery(4520): exception: datatype mismatch (code 20 SQLITE_MISMATCH);查询:INSERT Into Profile (mac,image,name,age,nationality,profession,about) VALUES ('0.0.0.0.0.0','/data/user/0/com.test.test/cache/scaled_image_picker3315305739073272987.jpg' ,'test','35','test','test','test'); 35 值应该是一个整数,但您在此版本的查询中将其称为字符串。只需将其切换回整数即可。 又犯了一个愚蠢的错误,但是,在将年龄列的数据类型更改为 TEXT 后,我仍然得到数据类型不匹配,反之亦然。你还能看到什么?仅供参考(平台版本和图像是字符串)

以上是关于Flutter SQLite 语法错误靠近 TEXT 小数点的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3.OperationalError:靠近“BatchID”:语法错误

android.database.sqlite.SQLiteException:靠近“”:语法错误

sqlite3.OperationalError:靠近“%”:语法错误

android.database.sqlite.SQLiteException:靠近“WHERE”:语法错误(Sqlite 代码 1)

android.database.sqlite.SQLiteException:靠近“编码”:语法错误(代码 1)

android.database.sqlite.SQLiteException:靠近“*”:语法错误:,编译时:SELECT调用._id