【发布时间】:2022-01-26 01:37:11
【问题描述】:
传统上,sqlite 允许将任何数据类型提交给数据库表中的任何字段,例如,您可以将 INTEGER 提交给 TEXT 字段。然而,自 sqlite 3.37.0 以来,现在正式支持严格的表数据类型,例如,如果您创建一个严格的表,则不能将 INTEGER 提交给 TEXT 字段。
flutter sqflite 包不断抛出错误,无法识别 STRICT 操作数。
CREATE TABLE table_name(field_one INTEGER, field_two TEXT) STRICT;
未处理的异常:DatabaseException(“STRICT”附近:语法错误(代码 1 SQLITE_ERROR)
在使用 sqflite 包在颤振中创建 sqlite 表时,是否有人能够强制执行严格的数据类型?
编辑---
flutter sqflite 包似乎使用了 android/ios 设备上预安装的任何 sqlite 版本。 Flutter sqflite 包不附带/捆绑任何额外的 sqlite 库,因此设备运行的是不支持 STRICT 数据类型的旧版本的 sqlite。
@Pavel 提供了一种在 android/ios 设备上安装最新版本的 sqlite 的方法。使用如下所示的代码,它确实安装了最新版本的 sqlite,但它仍然不允许您创建 STRICT 数据库表。当您执行代码时,它会创建一个已损坏的格式错误的数据库表。
import 'package:sqflite_common/sqlite_api.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
sqfliteFfiInit();
var db = await databaseFactoryFfi.openDatabase(inMemoryDatabasePath);
await db.execute('''
CREATE TABLE Product (
field_one INTEGER,
field_two TEXT
) STRICT
''');
【问题讨论】:
-
你检查你使用的SQLite版本了吗?
-
我没有直接用sqlite,我用的是最新的flutter包sqflite 2.0.1
-
执行查询:
select sqlite_version();,查看返回值。 -
你不能在颤振包 sqflite 2.0.1 中输入原始选择命令
标签: database flutter sqlite strict