Как получить количество строк в таблице базы данных с помощью 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();
}
}