Как сделать запрос к базе данных SQL Lite, используя флаттер sqflite - PullRequest
0 голосов
/ 17 апреля 2020

Я настроил базу данных после этого ответа: Как выполнить запрос к базе данных с помощью SQFlite во Flutter , но я хочу получить сумму всех элементов в столбце для базы данных, которую я создаю, и затем отобразите этот номер на TextLabel. Я посмотрел, но не смог найти никакой информации о том, где я мог бы найти решение этой

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

SQFlite, так же как SQLite имеет Агрегатные функции , и для выполнения функции суммирования вы можете сделать это как rawQuery следующим образом:

Future<int> sumItems() async {
    final sum = await db.rawQuery("SELECT sum(id_word) as sum FROM Word");
    //print(sum[0]["sum"]);
    return sum[0]["sum"];
  }

Чтобы использовать результат этой функции в вашем Текстовый виджет, вам просто нужно использовать FutureBuilder .

Кроме того, если вы хотите использовать аргументы, такие как предложение WHERE или предложение Group By, просто добавьте его, передав аргументы в виде массива. .

    final sum = await db.rawQuery("SELECT sum(id_word) as sum FROM Word WHERE id_word = ?", [5]);
0 голосов
/ 17 апреля 2020

Ссылаясь на тот же ответ, вы можете сделать что-то вроде ниже:

List<Map> result = await db.query(DatabaseHelper.table);

int total = 0;    
// print the results
result.forEach((row) => total = total + row.price);

Или с необработанным запросом, это так;

Future calculateTotal() async {
  var dbClient = await db;
  var result = await dbClient.rawQuery("select sum(price) as Total from my_table");
}

int _total;

void _calcTotal() async{
  var total = (await db.calculateTotal())[0]['Total'];
  print(total);
  setState(() => _total = total)
}

@override
Widget build(BuildContext context) {
  ...  
  Text(_total != null ? _total : 'waiting ...', ... )
...