Flutter数据库管理插件sql_data_helper的使用

Flutter数据库管理插件sql_data_helper的使用

sql_data_helper

pub package

一个用于组织数据库数据的Dart包。


开始使用

安装

在你的Flutter项目中,将该包添加到依赖项中:

flutter pub add sql_data_helper

或者在pubspec.yaml文件中添加以下内容:

dependencies:
  ...
  sql_data_helper: #最新版本号
  ...

使用示例

创建字段

SqlColumnModel idField = SqlColumnModel("field_name",
    type: SqlDataType.integer, primaryKey: true, autoIncrement: true);

创建外键

SqlForeignKeyModel fkField = SqlForeignKeyModel(
    "field",
    table: "table_name",
    columnPrimaryKey: "pk_of_table",
    onUpdateRule: SqlForeignKeyRules.cascade,
    onDeleteRule: SqlForeignKeyRules.cascade);

示例:组织一个表

abstract class SqlTableRestaurant {
  static const String tableName = "restaurants";

  static final SqlColumnModel id = SqlColumnModel("id",
      type: SqlDataType.integer, primaryKey: true, autoIncrement: true);

  static final SqlColumnModel name = SqlColumnModel("name", type: SqlDataType.text, notNull: true);

  String get toCreate => "CREATE TABLE IF NOT EXISTS $tableName (${[
    id.toCreate,
    name.toCreate
  ].join(" ")})";
}

带外键的示例

abstract class SqlTableFood {
  static const String tableName = "foods";

  static final SqlColumnModel id = SqlColumnModel("id",
      type: SqlDataType.integer, primaryKey: true, autoIncrement: true);

  static final SqlColumnModel restaurantId = SqlColumnModel("restaurant_id",
      type: SqlDataType.integer, notNull: true);

  static final SqlColumnModel name =
  SqlColumnModel("name", type: SqlDataType.text);

  static final SqlForeignKeyModel _restaurantFk = SqlForeignKeyModel(
      restaurantId.name,
      table: SqlTableRestaurant.tableName,
      columnPrimaryKey: SqlTableRestaurant.id.name,
      onUpdateRule: SqlForeignKeyRules.cascade,
      onDeleteRule: SqlForeignKeyRules.cascade);

  String get toCreate => "CREATE TABLE IF NOT EXISTS $tableName (${[
    id.toCreate,
    restaurantId.toCreate,
    name.toCreate,
    _restaurantFk.toCreate
  ].join(" ")})";
}

更多关于Flutter数据库管理插件sql_data_helper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库管理插件sql_data_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


sql_data_helper 是一个用于简化 Flutter 应用中 SQLite 数据库操作的插件。它提供了一种简单的方式来执行常见的数据库操作,如插入、查询、更新和删除数据。以下是如何在 Flutter 项目中使用 sql_data_helper 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 sql_data_helper 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  sql_data_helper: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 创建数据库和表

在使用 sql_data_helper 之前,你需要创建一个数据库并定义表结构。你可以通过继承 SQLDataHelper 类来实现这一点。

import 'package:sql_data_helper/sql_data_helper.dart';

class MyDatabase extends SQLDataHelper {
  MyDatabase() : super('my_database.db');

  [@override](/user/override)
  Future<void> onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        age INTEGER
      )
    ''');
  }

  [@override](/user/override)
  Future<void> onUpgrade(Database db, int oldVersion, int newVersion) async {
    // 在这里处理数据库升级逻辑
  }
}

3. 初始化数据库

在你的应用启动时,初始化数据库。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final myDatabase = MyDatabase();
  await myDatabase.init();
  runApp(MyApp());
}

4. 插入数据

使用 insert 方法向数据库中插入数据。

Future<void> insertUser(String name, int age) async {
  final db = await myDatabase.database;
  await db.insert('users', {'name': name, 'age': age});
}

5. 查询数据

使用 query 方法从数据库中查询数据。

Future<List<Map<String, dynamic>>> getUsers() async {
  final db = await myDatabase.database;
  return await db.query('users');
}

6. 更新数据

使用 update 方法更新数据库中的数据。

Future<void> updateUser(int id, String name, int age) async {
  final db = await myDatabase.database;
  await db.update('users', {'name': name, 'age': age}, where: 'id = ?', whereArgs: [id]);
}

7. 删除数据

使用 delete 方法从数据库中删除数据。

Future<void> deleteUser(int id) async {
  final db = await myDatabase.database;
  await db.delete('users', where: 'id = ?', whereArgs: [id]);
}

8. 使用示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 sql_data_helper 插件。

import 'package:flutter/material.dart';
import 'package:sql_data_helper/sql_data_helper.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final myDatabase = MyDatabase();
  await myDatabase.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final myDatabase = MyDatabase();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SQL Data Helper Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                await insertUser('John Doe', 30);
                print('User inserted');
              },
              child: Text('Insert User'),
            ),
            ElevatedButton(
              onPressed: () async {
                final users = await getUsers();
                print('Users: $users');
              },
              child: Text('Get Users'),
            ),
            ElevatedButton(
              onPressed: () async {
                await updateUser(1, 'Jane Doe', 25);
                print('User updated');
              },
              child: Text('Update User'),
            ),
            ElevatedButton(
              onPressed: () async {
                await deleteUser(1);
                print('User deleted');
              },
              child: Text('Delete User'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> insertUser(String name, int age) async {
    final db = await myDatabase.database;
    await db.insert('users', {'name': name, 'age': age});
  }

  Future<List<Map<String, dynamic>>> getUsers() async {
    final db = await myDatabase.database;
    return await db.query('users');
  }

  Future<void> updateUser(int id, String name, int age) async {
    final db = await myDatabase.database;
    await db.update('users', {'name': name, 'age': age}, where: 'id = ?', whereArgs: [id]);
  }

  Future<void> deleteUser(int id) async {
    final db = await myDatabase.database;
    await db.delete('users', where: 'id = ?', whereArgs: [id]);
  }
}

class MyDatabase extends SQLDataHelper {
  MyDatabase() : super('my_database.db');

  [@override](/user/override)
  Future<void> onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        age INTEGER
      )
    ''');
  }

  [@override](/user/override)
  Future<void> onUpgrade(Database db, int oldVersion, int newVersion) async {
    // 在这里处理数据库升级逻辑
  }
}
回到顶部