flutter如何使用sql数据库

在Flutter中如何使用SQL数据库?我需要在应用中存储和查询数据,听说可以使用sqflite插件,但不太清楚具体实现步骤。能否提供一个完整的示例,包括数据库的创建、表的建立、数据的增删改查等基本操作?另外,如何处理数据库的版本升级和迁移问题?最好能说明下在iOS和Android平台上的兼容性注意事项。

2 回复

Flutter中使用SQL数据库,推荐使用sqflite插件。步骤如下:

  1. 添加sqflite依赖到pubspec.yaml。
  2. 创建数据库和数据表。
  3. 使用CRUD操作(增删改查)管理数据。
  4. 注意异步处理。

更多关于flutter如何使用sql数据库的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用SQL数据库,推荐使用 sqflite 插件,它是Flutter中最流行的SQLite数据库解决方案。以下是详细步骤和示例代码:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  sqflite: ^2.3.0
  path: ^1.8.3

运行 flutter pub get 安装依赖。

2. 创建数据库和表

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  factory DatabaseHelper() => _instance;
  DatabaseHelper._internal();

  static Database? _database;

  Future<Database> get database async {
    if (_database != null) return _database!;
    _database = await _initDatabase();
    return _database!;
  }

  Future<Database> _initDatabase() async {
    String path = join(await getDatabasesPath(), 'my_database.db');
    return await openDatabase(
      path,
      version: 1,
      onCreate: _createTables,
    );
  }

  Future<void> _createTables(Database db, int version) async {
    await db.execute('''
      CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT NOT NULL UNIQUE
      )
    ''');
  }
}

3. 增删改查操作

// 插入数据
Future<int> insertUser(Map<String, dynamic> user) async {
  Database db = await DatabaseHelper().database;
  return await db.insert('users', user);
}

// 查询数据
Future<List<Map<String, dynamic>>> getUsers() async {
  Database db = await DatabaseHelper().database;
  return await db.query('users');
}

// 更新数据
Future<int> updateUser(Map<String, dynamic> user) async {
  Database db = await DatabaseHelper().database;
  return await db.update(
    'users',
    user,
    where: 'id = ?',
    whereArgs: [user['id']],
  );
}

// 删除数据
Future<int> deleteUser(int id) async {
  Database db = await DatabaseHelper().database;
  return await db.delete(
    'users',
    where: 'id = ?',
    whereArgs: [id],
  );
}

4. 使用示例

// 插入用户
await insertUser({
  'name': '张三',
  'email': 'zhangsan@email.com'
});

// 查询所有用户
List<Map<String, dynamic>> users = await getUsers();
print(users);

注意事项:

  1. 数据库路径:使用 getDatabasesPath() 获取应用数据库目录
  2. 版本管理:通过 version 参数管理数据库版本升级
  3. 事务处理:使用 transaction 处理批量操作
  4. 数据类型:SQLite支持 TEXTINTEGERREALBLOB 等类型

其他选择:

  • moor:功能更丰富的ORM库
  • hive:轻量级键值数据库(非SQL)

建议在大型项目中使用数据库抽象层或ORM来更好地管理数据模型和迁移。

回到顶部