如何防止在 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.
中所述
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
);
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.
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
);