Как получить количество строк в таблице базы данных с помощью Flutter SQFlite

Как я могу получить количество строк таблицы базы данных во Flutter. Я использую плагин SQFlite.

Я предполагаю, что это похоже на Android, но Android имеет DatabaseUtils.queryNumEntries(db, TABLE_NAME), Есть ли у SQFlite нечто подобное?

Я отвечаю на вопрос, насколько мне известно, ниже, но я был бы рад получить лучший ответ, если таковой будет.

8 ответов

Решение

Ты можешь использовать

int count = Sqflite.firstIntValue(await db.rawQuery('SELECT COUNT(*) FROM table_name'));

где db такое SQFlite Database,

Источник: я нашел это здесь и в исходном коде.

Попробуйте эту функцию:

Future<int> getCount() async {
    //database connection
    Database db = await this.database;
    var x = await db.rawQuery('SELECT COUNT (*) from 
    $Table');
    int count = Sqflite.firstIntValue(x);
    return count;
}

Вы можете использовать волшебный столбец COUNT(*), как показано в документах.

Следовательно, функция подсчета будет выглядеть примерно так:

        @override
  Future<int> countUsersWithFirstName(String firstName) async {
    return Sqflite.firstIntValue(await db.query(
          'users',
          columns: ['COUNT(*)'],
          where: 'firstName = ?',
          whereArgs: [firstName],
        )) ??
        0;
  }

Больше никаких сложных вызовов функций не требуется. просто попробуй с .length Если вы используете модель данных, вы можете использовать ее имя в MODEL_NAME.

      Future<int> getCount() async {

Database db = await this.database;
var result = await db.query(MODEL_NAME.TABLE_NAME);
int count = result.length;
return count;

}

Я считаю, что лучший способ сделать это - внутри DatabaseHelper / Service class:

      class DbService {
  static Database _db; //static = only a single copy of _db is shared among all the instances of this class (Database)
  static int _count;

  static int get count => _count;
  ...

так каждый раз, когда query выполняет обновления, это также позволяет обновлять count по запросам с фильтрами без необходимости писать новый function для этого 😎:

        List<Map> result = await db.query('myDatabase');
  _count = result.length;
  return result;
}

а затем просто используйте DbService.count чтобы получить счет

Вы также можете использовать

List<Map> list = await db.rawQuery('SELECT * FROM table_name');
int count = list.length;

Это мой код, используемый для подсчета условий пользовательского столбца.

      Future<int?> getCustomTaskCount(String t1) async {
Database? _database = await database;
if (_database != null) {
  var result = Sqflite.firstIntValue(await _database.rawQuery(
      'SELECT COUNT (*) FROM tableName WHERE columnName=?',
      [t1]));
  print(result);
  return result;
}}

Попробуйте этот код:

class DatabaseHelper() {

  Future<List<Map<String, dynamic>>> getDataInMap() async {
      Database database = await this.database;
      return database.query("ahkam_fiqhia");
  }

  Future<List<BooksModel>> getModelsFromMapList() async {
    List<Map<String, dynamic>> mapList = await getDataInMap();

    List<DataModel> dataModel = List();

    for (int i = 0; i < mapList.length; i++) {
      dataModel(DataModel(mapList[i]));
    }
    print(mapList.length);
    return dataModel;
  }

}

добавлять initState() функция в вашем представлении, затем вызовите getModelsFromMapList функция:

class _MainView extends State<MainView> {

  DatabaseHelper dbHelper = databaseHelper();  

  @override
  void initState() {
    super.initState();
    databaseHelper.getModelsFromMapList();
  }
}

Другие вопросы по тегам