8

如何在 Flutter 中获取数据库表的行数。我正在使用 SQFlite 插件。

我假设它类似于 Android,但 Android 有DatabaseUtils.queryNumEntries(db, TABLE_NAME). SQFlite 有类似的东西吗?

我在下面尽我所知回答这个问题,但如果有更好的答案,我会很高兴。

4

7 回答 7

31

您可以使用

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

SQFlitedb在哪里。 Database

来源:我在这里源代码中找到了这个。

于 2019-01-08T18:45:09.363 回答
13

试试这个功能:

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;
}
于 2019-06-26T09:27:27.750 回答
1

不再需要硬函数调用。只需尝试.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;

}

于 2021-01-20T14:52:24.210 回答
1

我相信更好的方法是在 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;
  ...

这样每次 aquery执行count更新时,这也使得可以count使用过滤器更新 on 查询,而无需为其编写新function的:

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

然后简单地使用DbService.count来获取计数

于 2021-05-29T19:36:58.497 回答
0

你也可以使用

List<Map> list = await db.rawQuery('SELECT * FROM table_name');
int count = list.length;
于 2019-06-01T17:08:31.177 回答
0

试试这个代码:

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();
  }
}

于 2020-06-13T22:56:18.603 回答
0

这是我用于自定义列条件计数的代码

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;
}}
于 2022-01-12T20:58:43.040 回答