当前位置: 首页 > article >正文

Flutter访问数据库

在Flutter开发中,数据存储和访问是非常重要的环节。本文将详细介绍如何在Flutter应用中访问本地数据库,尤其是使用SQLite数据库和sqflite插件。

## 一、为什么选择SQLite?

SQLite是一种轻量级的关系型数据库,具有以下优点:

- 轻量级、占用资源少
- 支持事务,数据安全性高
- 跨平台,适合移动端开发
- 易于集成和使用

Flutter社区提供了强大的sqflite插件,帮助我们轻松地在Flutter应用中使用SQLite数据库。

## 二、安装sqflite插件

在项目的`pubspec.yaml`文件中添加依赖:

```yaml
dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.3.2
  path_provider: ^2.1.3
```

然后运行以下命令安装插件:

```bash
flutter pub get
```

## 三、创建数据库和数据表

我们首先创建一个数据库帮助类,负责数据库的初始化和表的创建:

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

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

  static Database? _db;

  DatabaseHelper.internal();

  Future<Database> get db async {
    if (_db != null) return _db!;
    _db = await initDb();
    return _db!;
  }

  Future<Database> initDb() async {
    String databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'my_database.db');

    var db = await openDatabase(path, version: 1, onCreate: _onCreate);
    return db;
  }

  void _onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
      )
    ''');
  }
}
```

## 四、实现CRUD操作

### 插入数据(Create)

```dart
Future<int> insertUser(Map<String, dynamic> user) async {
  var dbClient = await db;
  return await dbClient.insert('users', user);
}
```

使用示例:

```dart
var dbHelper = DatabaseHelper();
await dbHelper.insertUser({'name': 'Alice', 'age': 25});
```

### 查询数据(Read)

```dart
Future<List<Map<String, dynamic>>> getUsers() async {
  var dbClient = await db;
  return await dbClient.query('users');
}
```

使用示例:

```dart
var users = await dbHelper.getUsers();
print(users);
```

### 更新数据(Update)

```dart
Future<int> updateUser(int id, Map<String, dynamic> user) async {
  var dbClient = await db;
  return await dbClient.update('users', user, where: 'id = ?', whereArgs: [id]);
}
```

使用示例:

```dart
await dbHelper.updateUser(1, {'name': 'Bob', 'age': 30});
```

### 删除数据(Delete)

```dart
Future<int> deleteUser(int id) async {
  var dbClient = await db;
  return await dbClient.delete('users', where: 'id = ?', whereArgs: [id]);
}
```

使用示例:

```dart
await dbHelper.deleteUser(1);
```

## 五、完整示例

下面是一个简单的完整示例,展示了如何使用上述方法:

```dart
void main() async {
  var dbHelper = DatabaseHelper();

  // 插入数据
  await dbHelper.insertUser({'name': 'Alice', 'age': 25});

  // 查询数据
  var users = await dbHelper.getUsers();
  print('Users: $users');

  // 更新数据
  await dbHelper.updateUser(1, {'name': 'Alice Updated', 'age': 26});

  // 删除数据
  await dbHelper.deleteUser(1);
}
```

## 六、小结

本文介绍了如何在Flutter应用中使用SQLite数据库进行数据存储和访问。通过sqflite插件,我们可以轻松实现数据库的创建、数据的增删改查等操作。希望本文能帮助你更好地掌握Flutter数据库开发。


http://www.kler.cn/a/598198.html

相关文章:

  • 【Python数据分析+可视化项目案例】:亚马逊平台用户订单数据分析
  • 【动态规划】下降路径最小和
  • KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
  • 2025年第二期 | CCF ODC《开源战略动态月报》
  • 【leetcode hot 100 51】N皇后
  • JVM如何处理Java中的精度转换: 从源码到字节码
  • 坦克大战(c++)
  • list的模拟实现和学习
  • 数据分析异步进阶:aiohttp与Asyncio性能提升
  • 杨辉三角 II(js实现,LeetCode:119)
  • OSPF多区域通信
  • Js闭包Closure 及 其可能产生的内存泄漏问题
  • C++常见问题与思考
  • js去除后端返回json的冗余字段
  • C语言-状态模式详解与实践 - OTA升级状态机
  • WebSocket:现代实时通信协议的深度解析与实践
  • flask不会随着网页的刷新和关闭停止任务
  • 从失衡到平衡:手撕 AVL 树的插入旋转操作
  • 嵌入式学习(31)-Lora模块A39C-T400A30D1a
  • Transformer中,Fisher矩阵与权重之间关系