如何防止在 sqflite 中将我的 STRING 数据类型转换为 INT? (扑)

How do I prevent the conversion of my STRING datatype into INT in sqflite? (flutter)

onCreate: (db, version) {
        // Run the CREATE TABLE statement on the database.
        return db.execute(
          'CREATE TABLE favourites(id STRING PRIMARY KEY, stop STRING, stop_name STRING, bus STRING)',
        );
        //id shall consist of both stop and bus numbers
      },

这是我用来创建 table 的代码段。

Future<List<Favourite>> getFavourites() async {
    // Get a reference to the database.
    final db = await database();

    // Query the table for all The Dogs.
    final List<Map<String, dynamic>> maps = await db.query('favourites');
    print('maps line 165: $maps');
    // Convert the List<Map<String, dynamic> into a List<Dog>.
    return List.generate(maps.length, (i) {
      return Favourite(
        id: maps[i]['id'],
        stop: maps[i]['stop'],
        stopName: maps[i]['stopName'],
        bus: maps[i]['bus'],
      );
    });
  }

上面这个函数是我用来检索数据的。但是我得到了这个错误。 “未处理的异常:类型 'int' 不是类型 'String' 的子类型”。这意味着我作为 String 插入到 table 中的数字被转换为 int。例如,stop = "09038" 将作为 int 转换为 9038。

我所有的对象都在字符串中。

String id = '0';
String stop = '0';
String stopName = '0';
String bus = '0';

有什么解决办法吗?

没有STRING data type in SQLite 但允许使用,因为SQLite 允许anything 用作数据类型。

当您将列定义为 STRING 时,它实际上被认为具有 NUMERIC 亲和力,如 Determination Of Column Affinity.

中所述

来自Type Affinity

A column with NUMERIC affinity may contain values using all five storage classes. When text data is inserted into a NUMERIC column, the storage class of the text is converted to INTEGER or REAL (in order of preference) if the text is a well-formed integer or real literal, respectively.....

查看简化版 demo.

您所要做的就是将要作为字​​符串的列定义为正确的数据类型,即 TEXT:

CREATE TABLE favourites(
  id TEXT PRIMARY KEY, 
  stop TEXT, 
  stop_name TEXT, 
  bus TEXT
);