面试题答案
一键面试在Flutter项目中使用sqflite
库操作SQLite数据库时,可以这样创建索引来加快按年龄查询用户的速度。首先确保已经添加sqflite
依赖到pubspec.yaml
文件中。
以下是创建索引的代码示例:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<void> createUserTableAndIndex(Database db) async {
// 创建用户表
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER,
address TEXT
)
''');
// 创建按年龄查询的索引
await db.execute('''
CREATE INDEX idx_age ON users (age)
''');
}
Future<Database> openDatabaseConnection() async {
final path = join(await getDatabasesPath(), 'users.db');
return openDatabase(
path,
version: 1,
onCreate: (db, version) => createUserTableAndIndex(db),
);
}
在上述代码中:
- 首先通过
db.execute
执行SQL语句创建了一个名为users
的表,包含id
(自增主键)、name
(姓名)、age
(年龄)和address
(地址)字段。 - 然后又通过
db.execute
执行另一条SQL语句创建了一个名为idx_age
的索引,该索引基于users
表的age
字段。这样在按年龄查询用户时,数据库可以利用这个索引更快地定位到相关记录。 openDatabaseConnection
函数用于打开数据库连接,并在数据库创建时调用createUserTableAndIndex
函数来创建表和索引。
在实际使用中,可以这样查询数据:
Future<List<Map<String, dynamic>>> queryUsersByAge(int age) async {
final db = await openDatabaseConnection();
return db.query(
'users',
where: 'age =?',
whereArgs: [age],
);
}
queryUsersByAge
函数通过db.query
方法,利用前面创建的索引,按指定年龄查询用户信息。where
子句指定查询条件为age
等于给定值,whereArgs
用于传递具体的年龄值。这样在大量数据时,查询速度会因为索引而显著提升。