思路
- 数据库连接:首先使用
sqflite
库连接到SQLite数据库。
- 事务处理:在执行复杂查询时,开启一个事务。事务可以确保一系列操作要么全部成功,要么全部失败,从而保证数据一致性。
- 关联查询:使用SQL的
JOIN
语句从主表和子表中获取关联数据。因为是一对多关系,主表中的一条记录可能对应子表中的多条记录。
关键代码片段
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
// 数据库连接
Future<Database> openDatabaseConnection() async {
final String databasesPath = await getDatabasesPath();
final String path = join(databasesPath, 'your_database.db');
return openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
// 创建主表
await db.execute('''
CREATE TABLE main_table (
id INTEGER PRIMARY KEY,
main_column TEXT
)
''');
// 创建子表
await db.execute('''
CREATE TABLE sub_table (
id INTEGER PRIMARY KEY,
main_table_id INTEGER,
sub_column TEXT,
FOREIGN KEY (main_table_id) REFERENCES main_table(id)
)
''');
});
}
// 复杂查询
Future<List<Map<String, dynamic>>> complexQuery() async {
final Database db = await openDatabaseConnection();
return db.transaction((txn) async {
// 使用JOIN查询主表和子表的关联数据
return txn.query('''
SELECT main_table.id, main_table.main_column, sub_table.sub_column
FROM main_table
JOIN sub_table ON main_table.id = sub_table.main_table_id
''');
});
}