如何使用 Flutter SQFlite 获取数据库中的行数 table
How to get the number of rows in a database table with Flutter SQFlite
如何在 Flutter 中获取数据库 table 的行数。我正在使用 SQFlite 插件。
我假设它类似于 Android,但 Android 有 DatabaseUtils.queryNumEntries(db, TABLE_NAME)
。 SQFlite 有类似的东西吗?
我将尽我所知在下面回答这个问题,但如果有更好的答案,我会很高兴。
您可以使用
int count = Sqflite.firstIntValue(await db.rawQuery('SELECT COUNT(*) FROM table_name'));
其中 db
是 SQFlite Database
。
来源: 我找到了这个 here and in the source code。
您也可以使用
List<Map> list = await db.rawQuery('SELECT * FROM table_name');
int count = list.length;
试试这个函数:
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;
}
试试这个代码:
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();
}
}
不再需要硬函数调用。试试 .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
得到计数
这是我用于自定义列条件计数的代码
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;
}}
您可以使用 magic column COUNT(*) as shown in the docs
因此,计数函数类似于:
@override
Future<int> countUsersWithFirstName(String firstName) async {
return Sqflite.firstIntValue(await db.query(
'users',
columns: ['COUNT(*)'],
where: 'firstName = ?',
whereArgs: [firstName],
)) ??
0;
}
如何在 Flutter 中获取数据库 table 的行数。我正在使用 SQFlite 插件。
我假设它类似于 Android,但 Android 有 DatabaseUtils.queryNumEntries(db, TABLE_NAME)
。 SQFlite 有类似的东西吗?
我将尽我所知在下面回答这个问题,但如果有更好的答案,我会很高兴。
您可以使用
int count = Sqflite.firstIntValue(await db.rawQuery('SELECT COUNT(*) FROM table_name'));
其中 db
是 SQFlite Database
。
来源: 我找到了这个 here and in the source code。
您也可以使用
List<Map> list = await db.rawQuery('SELECT * FROM table_name');
int count = list.length;
试试这个函数:
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;
}
试试这个代码:
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();
}
}
不再需要硬函数调用。试试 .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
得到计数
这是我用于自定义列条件计数的代码
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;
}}
您可以使用 magic column COUNT(*) as shown in the docs
因此,计数函数类似于:
@override
Future<int> countUsersWithFirstName(String firstName) async {
return Sqflite.firstIntValue(await db.query(
'users',
columns: ['COUNT(*)'],
where: 'firstName = ?',
whereArgs: [firstName],
)) ??
0;
}