Flutter中sqflite的使用案例

目录

引言

安装sqflite

创建表

查询数据

添加数据

删除数据

更新数据

完整使用案例


引言

随着移动应用的发展,本地数据存储成为了一个不可或缺的功能。在Flutter中,sqflite 是一个非常流行且强大的SQLite插件,它允许开发者在移动设备上轻松地进行数据库操作。本文将通过具体的使用案例,详细介绍如何在Flutter项目中集成和使用 **sqflite**进行数据存储和查询。

安装sqflite

首先,你需要在**pubspec.yaml** 文件中添加**sqflite**依赖:

Dart 复制代码
dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.3.3+1

然后运行 flutter pub get 来安装依赖,或者直接执行下面的命令

flutter pub add sqflite

创建表

Dart 复制代码
// 创建表
  Future<void> _onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE Domain (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        url TEXT
      )
    ''');
  }

查询数据

Dart 复制代码
// 查看表的数据
  Future<List<Map<String, dynamic>>> getItemsFromTable() async {
    Database db = await database;
    return await db.query("Domain");
  }
// 查看存在某一条数据
 Future<bool> checkIfQrExists(String url) async {
    Database db = await database;
    List<Map<String, dynamic>> results = await db.query(
      'Domain',
      where: 'url= ?',
      whereArgs: [url],
    );
    return results.isNotEmpty;
  }

添加数据

Dart 复制代码
Future<void> insertDomain(String url) async {
    Database db = await database;
    await db.insert('Domain', {
      'url': url,
    });
  }

删除数据

Dart 复制代码
Future<void> deleteUrl(String url) async {
  final db = await database;
  await db.delete(
    'Domain',
    where: 'url = ?',
    whereArgs: [url],
  );
}

更新数据

Dart 复制代码
Future<void> updateUrl(Map<String, dynamic> domain, String url) async {
  final db = await database;
  await db.update(
    'Domain',
    domain,
    where: 'url = ?',
    whereArgs: [url],
  );
}

完整使用案例

Dart 复制代码
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  factory DatabaseHelper() => _instance;
  static Database? _database;
  static const int databaseVersion = 2;

  DatabaseHelper._internal();

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

  Future<Database> _initDatabase() async {
    // 初始化操作
    String path = join(await getDatabasesPath(), 'app_database.db');
    return await openDatabase(
      path,
      version: databaseVersion,
      onCreate: _onCreate,
      onUpgrade: _onUpgrade,
    );
  }

  // 创建表
  Future<void> _onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE Domain (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        url TEXT
      )
    ''');
  }

  Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
    print("版本号为$oldVersion");
    if (oldVersion < 2) {
      // 更新数据库的操作
    }
  }

  // 查看表的数据
  Future<List<Map<String, dynamic>>> getItemsFromTable() async {
    Database db = await database;
    return await db.query("Domain");
  }

// 查看存在某一条数据
  Future<bool> checkIfQrExists(String url) async {
    Database db = await database;
    List<Map<String, dynamic>> results = await db.query(
      'Domain',
      where: 'url= ?',
      whereArgs: [url],
    );
    return results.isNotEmpty;
  }

// 增加一条数据
  Future<void> insertDomain(String url) async {
    Database db = await database;
    await db.insert('Domain', {
      'url': url,
    });
  }

  // 更新一条数据
  Future<void> updateUrl(Map<String, dynamic> domain, String url) async {
    final db = await database;
    await db.update(
      'Domain',
      domain,
      where: 'url = ?',
      whereArgs: [url],
    );
  }
}

使用时

Dart 复制代码
  DatabaseHelper dbHelper = DatabaseHelper();

  Future<void> getDatabaseData() async {
    List<Map<String, dynamic>> data = await dbHelper.getItemsFromTable();
    for (var item in data) {
      print('Item: ${item.toString()}');
    }
  }
相关推荐
子榆.44 分钟前
Flutter 与开源鸿蒙(OpenHarmony)工程化实践:CI/CD、性能监控与多端发布
flutter·开源·harmonyos
QuantumLeap丶1 小时前
《Flutter全栈开发实战指南:从零到高级》- 26 -持续集成与部署
android·flutter·ios
晚烛4 小时前
实战前瞻:构建高安全、强协同的 Flutter + OpenHarmony 智慧金融移动银行平台(支持国产密码体系、生物认证与信创全栈适配)
安全·flutter·金融
子榆.4 小时前
Flutter 与开源鸿蒙(OpenHarmony)国际化与无障碍适配指南:打造真正包容的跨平台应用
flutter·华为·开源·harmonyos
子榆.5 小时前
Flutter 与开源鸿蒙(OpenHarmony)深度集成:从原理到实战进阶
flutter·华为·开源·harmonyos
子榆.5 小时前
Flutter 与开源鸿蒙(OpenHarmony)的融合:跨平台开发新纪元
flutter·华为·开源·harmonyos
走在路上的菜鸟6 小时前
Android学Dart学习笔记第二十三节 类-扩展类型
android·笔记·学习·flutter
晚烛6 小时前
智启工厂脉搏:基于 OpenHarmony + Flutter 的信创工业边缘智能平台构建实践
前端·javascript·flutter
爱吃大芒果6 小时前
Flutter 表单开发实战:表单验证、输入格式化与提交处理
开发语言·javascript·flutter·华为·harmonyos
光影少年6 小时前
RN vs Flutter vs Expo 选型
前端·flutter·react native