MST

星途 面试题库

面试题:Flutter中SQLite数据库存储的基本操作

在Flutter项目中,如何使用SQLite插件进行数据库的创建、表的创建以及数据的插入操作?请写出关键代码片段,并解释每个步骤的作用。
17.5万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 添加依赖: 在pubspec.yaml文件中添加sqflite依赖:

    dependencies:
      sqflite: ^2.2.3
    

    然后运行flutter pub get获取依赖。这一步是为了在项目中引入SQLite操作的插件,使得我们可以使用其提供的API来操作SQLite数据库。

  2. 创建数据库

    import 'package:sqflite/sqflite.dart';
    import 'package:path/path.dart';
    
    Future<Database> createDatabase() async {
      final databasesPath = await getDatabasesPath();
      final path = join(databasesPath, 'example.db');
      return await openDatabase(
        path,
        version: 1,
        onCreate: (Database db, int version) async {
          await db.execute('''
            CREATE TABLE Users (
              id INTEGER PRIMARY KEY AUTOINCREMENT,
              name TEXT,
              age INTEGER
            )
          ''');
        },
      );
    }
    
    • getDatabasesPath获取应用的数据库存储路径。
    • join函数将数据库文件名和路径拼接起来。
    • openDatabase打开或创建数据库。如果数据库不存在,会创建数据库并执行onCreate回调。在onCreate回调中,通过db.execute执行SQL语句来创建Users表,表中有id(自增主键)、name(文本类型)和age(整型)字段。
  3. 插入数据

    Future<void> insertData(Database db) async {
      await db.insert(
        'Users',
        {
          'name': 'John',
          'age': 30
        },
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
    }
    
    • db.insert方法用于向Users表中插入数据。第一个参数是表名,第二个参数是一个Map,包含要插入的列名和对应的值。
    • conflictAlgorithm指定了在插入数据时,如果发生冲突(例如主键冲突)的处理方式,这里ConflictAlgorithm.replace表示替换已有的数据。
  4. 完整使用示例

    void main() async {
      final db = await createDatabase();
      await insertData(db);
      await db.close();
    }
    
    • 首先调用createDatabase创建数据库和表。
    • 然后调用insertData插入数据。
    • 最后调用db.close关闭数据库连接,释放资源。