如何使用Flutter SQFlite获取数据库表中的行数

时间:2019-01-08 18:45:09

标签: dart flutter sqflite

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

我认为它与Android类似,但是Android具有DatabaseUtils.queryNumEntries(db, TABLE_NAME)。 SQFlite有类似的东西吗?

我将尽我所能回答这个问题,但是如果有一个更好的答案,我将很高兴。

6 个答案:

答案 0 :(得分:2)

您可以使用

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

其中dbSQFlite Database

来源:我在heresource code中找到了这个。

答案 1 :(得分:1)

您也可以使用

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

答案 2 :(得分:1)

尝试使用此功能:

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

答案 3 :(得分: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;

}

答案 4 :(得分: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;
  ...

这样每次执行 query 时都会更新 count,这也可以更新带有过滤器的查询的 count,而无需编写新的 {{1} ?:

function

然后简单地使用 List<Map> result = await db.query('myDatabase'); _count = result.length; return result; } 来获取计数

答案 5 :(得分: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();
  }
}