从 sql 数据库中以 flutter datewise 方式获取数据?
Fetching data from sql databse in flutter datewise?
我正在 flutter 中制作一个应用程序,我正在使用 sqflite 插件实现 SQL 数据库。在此应用中,用户可以通过填写下面的表格来创建交易
然后用户可以验证他们的交易,他们还可以选择编辑交易以防他们犯了错误
现在我想添加一个功能,通过该功能,他们可以在下面的屏幕上获得他们在特定月份完成的费用总和
它显示为空,但它应该显示费用总和
我的查询代码是
Future getDataJan() async{
final db = await database;
sumJan=await db.rawQuery(
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= ? AND DATE(DATETIME) <= ?',
[2021-01-01, 2021-01-31] ).then(Sqflite.firstIntValue);
print(sumJan);
finalJan=sumJan.toString();
}
数据库创建:
Future<Database> createDatabase() async {
String dbPath = await getDatabasesPath();
return await openDatabase(
join(dbPath, 'expenseDB.db'),
version: 1,
onCreate: (Database database, int version) async {
print("Creating expense table");
await database.execute(
"CREATE TABLE $TABLE_EXPENSES ("
"$COLUMN_ID INTEGER PRIMARY KEY,"
"$COLUMN_NAME TEXT,"
"$COLUMN_AMOUNT INTEGER,"
"$COLUMN_UNNECESSARYEXPENSES INTEGER,"
"$COLUMN_CATEGORY TEXT,"
"$COLUMN_DATETIME TEXT"
")",
);
},
);
}
映射数据库(我认为它因为映射时的字符串而不起作用):
Map<String, dynamic> toMap() {
var map = <String, dynamic>{
DatabaseProvider.COLUMN_NAME: name,
DatabaseProvider.COLUMN_AMOUNT: amount,
DatabaseProvider.COLUMN_UNNECESSARYEXPENSES: isUnnecessaryExpenses ? 1 : 0,
DatabaseProvider.COLUMN_CATEGORY: category,
DatabaseProvider.COLUMN_DATETIME: pickedDate,
};
if (id != null) {
map[DatabaseProvider.COLUMN_ID] = id;
}
return map;
}
数据库条目:
编辑:
这是我创建一个 Widget 以调用日期选择的代码:
Widget DatePicker() {
showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.parse("2020-01-01 00:00:01Z"), lastDate: DateTime.now()
).then((value){
if (value == null){
return;
}
_dateTime = value;
////saving in string
pickedDate = DateFormat('yyyy-MM-dd').format(_dateTime);
});
}
Problematic Dude 建议后给出的错误:
lib/db/database_provider.dart:111:59: Error: Expected ',' before this.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/db/database_provider.dart:111:58: Error: The getter 'm' isn't defined for the class 'DatabaseProvider'.
- 'DatabaseProvider' is from 'package:finance_manager/db /database_provider.dart' ('lib/db/database_provider.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^
lib/db/database_provider.dart:111:57: Error: The operator '%' isn't defined for the class 'String'.
Try correcting the operator to an existing operator, or defining a '%' operator.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^
lib/db/database_provider.dart:111:59: Error: The argument type 'String' can't be assigned to the parameter type 'List<dynamic>'.
- 'List' is from 'dart:core'.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
更新
我在 android 工作室中使用数据库检查器打开了数据库,并尝试 运行 在其中执行以下查询:
SELECT SUM(AMOUNT) FROM EXPENSES
SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= 2021-01-01 and DATE(DATETIME) <= 2021-01-31
上面的查询工作得很好并且 returns 列数量的总和 ,但是一旦我 运行 第二个查询它给了我再次为 null,我想我以错误的方式保存日期。
请帮忙。
感谢您的回复
您的函数在日期前后缺少引号
Future getDataJan() async{
final db = await database;
sumJan=await db.rawQuery(
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= ? AND DATE(DATETIME) <= ?',
['2021-01-01', '2021-01-31'] ).then(Sqflite.firstIntValue);
print(sumJan);
finalJan=sumJan.toString();
}
我正在 flutter 中制作一个应用程序,我正在使用 sqflite 插件实现 SQL 数据库。在此应用中,用户可以通过填写下面的表格来创建交易
我的查询代码是
Future getDataJan() async{
final db = await database;
sumJan=await db.rawQuery(
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= ? AND DATE(DATETIME) <= ?',
[2021-01-01, 2021-01-31] ).then(Sqflite.firstIntValue);
print(sumJan);
finalJan=sumJan.toString();
}
数据库创建:
Future<Database> createDatabase() async {
String dbPath = await getDatabasesPath();
return await openDatabase(
join(dbPath, 'expenseDB.db'),
version: 1,
onCreate: (Database database, int version) async {
print("Creating expense table");
await database.execute(
"CREATE TABLE $TABLE_EXPENSES ("
"$COLUMN_ID INTEGER PRIMARY KEY,"
"$COLUMN_NAME TEXT,"
"$COLUMN_AMOUNT INTEGER,"
"$COLUMN_UNNECESSARYEXPENSES INTEGER,"
"$COLUMN_CATEGORY TEXT,"
"$COLUMN_DATETIME TEXT"
")",
);
},
);
}
映射数据库(我认为它因为映射时的字符串而不起作用):
Map<String, dynamic> toMap() {
var map = <String, dynamic>{
DatabaseProvider.COLUMN_NAME: name,
DatabaseProvider.COLUMN_AMOUNT: amount,
DatabaseProvider.COLUMN_UNNECESSARYEXPENSES: isUnnecessaryExpenses ? 1 : 0,
DatabaseProvider.COLUMN_CATEGORY: category,
DatabaseProvider.COLUMN_DATETIME: pickedDate,
};
if (id != null) {
map[DatabaseProvider.COLUMN_ID] = id;
}
return map;
}
数据库条目:
编辑: 这是我创建一个 Widget 以调用日期选择的代码:
Widget DatePicker() {
showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.parse("2020-01-01 00:00:01Z"), lastDate: DateTime.now()
).then((value){
if (value == null){
return;
}
_dateTime = value;
////saving in string
pickedDate = DateFormat('yyyy-MM-dd').format(_dateTime);
});
}
Problematic Dude 建议后给出的错误:
lib/db/database_provider.dart:111:59: Error: Expected ',' before this.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/db/database_provider.dart:111:58: Error: The getter 'm' isn't defined for the class 'DatabaseProvider'.
- 'DatabaseProvider' is from 'package:finance_manager/db /database_provider.dart' ('lib/db/database_provider.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^
lib/db/database_provider.dart:111:57: Error: The operator '%' isn't defined for the class 'String'.
Try correcting the operator to an existing operator, or defining a '%' operator.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
^
lib/db/database_provider.dart:111:59: Error: The argument type 'String' can't be assigned to the parameter type 'List<dynamic>'.
- 'List' is from 'dart:core'.
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE strftime('%m' , date(datetime)) == 01').then(Sqflite.firstIntValue);
更新
我在 android 工作室中使用数据库检查器打开了数据库,并尝试 运行 在其中执行以下查询:
SELECT SUM(AMOUNT) FROM EXPENSES
SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= 2021-01-01 and DATE(DATETIME) <= 2021-01-31
上面的查询工作得很好并且 returns 列数量的总和 ,但是一旦我 运行 第二个查询它给了我再次为 null,我想我以错误的方式保存日期。
请帮忙。
感谢您的回复
您的函数在日期前后缺少引号
Future getDataJan() async{
final db = await database;
sumJan=await db.rawQuery(
'SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATE(DATETIME) >= ? AND DATE(DATETIME) <= ?',
['2021-01-01', '2021-01-31'] ).then(Sqflite.firstIntValue);
print(sumJan);
finalJan=sumJan.toString();
}