Flutter SQLite数据库操作指南

在Flutter中使用SQLite数据库时遇到几个问题想请教:

  1. 如何正确初始化SQLite数据库?每次启动应用都需要重新创建数据库吗?
  2. 执行复杂的多表查询时有什么最佳实践?能否提供示例代码?
  3. 数据库升级时如何处理表结构变更?有没有自动迁移方案?
  4. 大量数据插入操作会导致UI卡顿,该如何优化性能?
  5. 在iOS和Android平台上SQLite的使用方式有差异吗?需要特别注意什么?
3 回复

作为一个屌丝程序员,我来分享一下Flutter中使用SQLite的基本操作。

首先添加依赖:sqflite: ^2.0.0+4,记得同步pubspec.yaml。

  1. 初始化数据库:
Future<Database> initializeDB() async {
  String path = await getDatabasesPath();
  return openDatabase(
    '$path/mydatabase.db',
    version: 1,
    onCreate: (db, version) {
      return db.execute("CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT)");
    },
  );
}
  1. 插入数据:
Future<void> insertUser(User user) async {
  final Database db = await initializeDB();
  await db.insert('users', user.toMap(), conflictAlgorithm: ConflictAlgorithm.replace);
}
  1. 查询数据:
Future<List<User>> getUsers() async {
  final Database db = await initializeDB();
  final List<Map<String, dynamic>> maps = await db.query('users');
  return List.generate(maps.length, (i) => User.fromMap(maps[i]));
}
  1. 更新和删除类似,使用update()delete()方法即可。

  2. 最后别忘了关闭数据库:await database.close();

这就是一个简单的SQLite操作流程,屌丝程序员必备技能之一!

更多关于Flutter SQLite数据库操作指南的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


作为一个屌丝程序员,使用Flutter操作SQLite非常实用。首先添加依赖sqflite,它是主流的SQLite插件。

  1. 初始化数据库:使用openDatabase打开或创建数据库文件。
import 'package:sqflite/sqflite.dart';
Future<Database> initDB() async {
  String path = join(await getDatabasesPath(), 'mydb.db');
  return await openDatabase(path, version: 1, onCreate: _onCreate);
}
void _onCreate(Database db, int version) async {
  await db.execute('CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT)');
}
  1. 增删改查

    • 插入数据:await db.insert('users', {'name': 'Tom'});
    • 查询数据:List<Map> maps = await db.query('users');
    • 更新数据:await db.update('users', {'name': 'Jerry'}, where: 'id = ?', whereArgs: [1]);
    • 删除数据:await db.delete('users', where: 'id = ?', whereArgs: [1]);
  2. 事务操作:用transaction处理复杂操作。

await db.transaction((txn) async {
  await txn.execute("INSERT INTO users(name) VALUES('Bob')");
});

记得关闭数据库db.close()。这是一份简单易懂的SQLite操作指南,希望对你有帮助!

Flutter SQLite数据库操作指南

基本操作

首先添加依赖(pubspec.yaml):

dependencies:
  sqflite: ^2.0.0
  path: ^2.0.0

1. 打开数据库

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

Future<Database> openDatabase() async {
  final databasePath = await getDatabasesPath();
  final path = join(databasePath, 'my_database.db');
  
  return openDatabase(
    path,
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)',
      );
    },
    version: 1,
  );
}

2. CRUD操作

// 插入数据
Future<void> insertUser(User user) async {
  final db = await openDatabase();
  await db.insert(
    'users',
    user.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

// 查询所有用户
Future<List<User>> users() async {
  final db = await openDatabase();
  final List<Map<String, dynamic>> maps = await db.query('users');
  return List.generate(maps.length, (i) {
    return User.fromMap(maps[i]);
  });
}

// 更新用户
Future<void> updateUser(User user) async {
  final db = await openDatabase();
  await db.update(
    'users',
    user.toMap(),
    where: 'id = ?',
    whereArgs: [user.id],
  );
}

// 删除用户
Future<void> deleteUser(int id) async {
  final db = await openDatabase();
  await db.delete(
    'users',
    where: 'id = ?',
    whereArgs: [id],
  );
}

3. 用户模型类

class User {
  final int id;
  final String name;
  final int age;

  User({required this.id, required this.name, required this.age});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }

  factory User.fromMap(Map<String, dynamic> map) {
    return User(
      id: map['id'],
      name: map['name'],
      age: map['age'],
    );
  }
}

最佳实践

  1. 使用事务处理批量操作
  2. 考虑使用数据库迁移处理版本升级
  3. 对于复杂查询使用原始SQL语句
  4. 关闭不再使用的数据库连接

以上是Flutter中使用SQLite的基本操作指南,涵盖了数据库创建和基本的CRUD操作。

回到顶部