You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用sqfentity/sqfentity_gen创建表时出现SQL语法错误

解决Flutter中sqfentity库创建名为'primary'的表失败问题

错误信息

SQFENTITIY ERROR: Table named [primary] could not create. Message: DatabaseException(near "primary": syntax error: , while compiling: Create table primary (id integer primary key, name text, email text, mobile integer, countryCode text, shortName text, gender integer DEFAULT '0', password text, isDeleted numeric NOT NULL DEFAULT 0)) sql 'Create table primary (id integer primary key, name text, email text, mobile integer, countryCode text, shortName text, gender integer DEFAULT '0', password text, isDeleted numeric NOT NULL DEFAULT 0)' args []

问题原因

primary是SQL的保留关键字,SQLite在执行CREATE TABLE语句时,会将primary识别为语法关键字而非表名,直接触发语法错误,导致表创建失败。

解决方案

方案1:重命名表名(推荐)

将表名修改为非SQL保留字,比如primary_info或user_primary,这是最稳妥的解决方式,能避免后续查询、更新操作中出现潜在问题。

修改表定义代码:

const SqfEntityTable tablePrimaryInfo = SqfEntityTable(
    tableName: 'primary_info', // 替换为非保留字表名
    primaryKeyName: 'id',
    primaryKeyType: PrimaryKeyType.integer_auto_incremental,
    useSoftDeleting: true,
    modelName: null,
    fields: [
      SqfEntityField('name', DbType.text, defaultValue: null),
      SqfEntityField('email', DbType.text),
      SqfEntityField('mobile', DbType.integer),
      SqfEntityField('countryCode', DbType.text),
      SqfEntityField('shortName', DbType.text),
      SqfEntityField('gender', DbType.integer, defaultValue: 0),
      SqfEntityField('password', DbType.text)
    ]);

同时更新数据加载函数中的类名(sqfentity_gen会根据新表名生成对应类,比如primary_info对应PrimaryInfo):

loadData() async {
    List<PrimaryInfo> primaryInfo = [];
    primaryInfo = await PrimaryInfo().select().toList();
    return primaryInfo;
}

方案2:转义保留字(不推荐)

如果必须使用primary作为表名,可以在SQL中用反引号包裹表名,但需要确认sqfentity库是否支持自动转义。若库未提供该功能,可能需要自定义SQL语句,这种方式会增加代码复杂度,且后续操作都需要注意转义,不建议使用。

内容的提问来源于stack exchange,提问作者kapil tk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:52:46