簡體   English   中英

如何使用 Flutter SQFlite 獲取數據庫表中的行數

[英]How to get the number of rows in a database table with Flutter SQFlite

如何在 Flutter 中獲取數據庫表的行數。 我正在使用 SQFlite 插件。

我假設它類似於 Android,但 Android 有DatabaseUtils.queryNumEntries(db, TABLE_NAME) SQFlite 有類似的東西嗎?

我在下面盡我所知回答這個問題,但如果有更好的答案,我會很高興。

您可以使用

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

其中dbSQFlite 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;
}

不再需要硬函數調用。 只需嘗試.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都會更新,這也使得可以使用過濾器更新查詢的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;

試試這個代碼:

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

這是我用於自定義列條件計數的代碼

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

您可以使用文檔中所示的魔法列 COUNT(*)

因此,count 函數看起來像:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM