Flutter数据库辅助插件sqllite_table_builder的使用

Flutter数据库辅助插件sqllite_table_builder的使用

特性

  • 程序化创建SQLite表。
  • 使用外键关联表。
  • 提供良好的编程接口以确保更高的安全性。

开始使用

pubspec.yaml文件中添加依赖:

dart pub add sqllite_table_builder

使用方法

以下是一些基本示例代码来展示如何使用sqllite_table_builder插件。

示例1:创建一个带有默认主键的表
import 'package:sqllite_table_builder/sqllite_table_builder.dart';

void main() {
  // 创建一个带有默认主键的表
  final someDataTable = SqlTableBuilder("some_data");

  // 生成创建该表的SQL查询
  final someDataQuery = someDataTable.buildSqlCreateQuery();

  /* 将打印:
    CREATE TABLE some_data (
        _id INTEGER PRIMARY KEY,
        ...
    );
  */
  print(someDataQuery);
}
示例2:创建一个带有指定主键的表
import 'package:sqllite_table_builder/sqllite_table_builder.dart';

void main() {
  final userProfileTableName = "user_profile";
  final userProfileUuidColumnName = "uuid";

  // 创建一个带有指定主键的表
  final userProfileTableBuilder = SqlTableBuilder(
    userProfileTableName,
    primaryKey: SqlColumn(name: userProfileUuidColumnName, type: SqlType.text),
  );

  // 生成创建该表的SQL查询
  final userProfileQuery = userProfileTableBuilder.buildSqlCreateQuery();

  /* 将打印:
    CREATE TABLE user_profile (
          uuid TEXT PRIMARY KEY
    );
  */
  print(userProfileQuery);

  // 创建一个带有默认主键的表
  final someDataTable = SqlTableBuilder("some_data");

  // 添加列并设置外键关联到用户配置表
  someDataTable
    ..createColumn("data", SqlType.integer)
    ..nullable(false)
    ..createColumn("more_data", SqlType.real)
    ..createColumn(userProfileUuidColumnName, SqlType.text)
    ..foreignKey(userProfileTableBuilder, userProfileUuidColumnName)
    ..onDelete(SqlForeignKeyConstrain.setNull);

  // 生成创建该表的SQL查询
  final someDataQuery = someDataTable.buildSqlCreateQuery();

  /* 将打印:
    CREATE TABLE some_data (
        _id INTEGER PRIMARY KEY,
        data INTEGER NOT NULL,
        more_data REAL,
        uuid TEXT,
        FOREIGN KEY (uuid) REFERENCES user_profile (uuid)
        ON DELETE SET NULL
    );
  */
  print(someDataQuery);
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter的sqlite_table_builder插件来辅助管理SQLite数据库的示例代码。这个插件可以帮助你更方便地定义和创建数据库表。

首先,确保你的pubspec.yaml文件中已经添加了sqlite_table_builder依赖:

dependencies:
  flutter:
    sdk: flutter
  sqlite3_flutter_libs: ^0.5.0  # sqlite3的Flutter库,通常是必需的
  sqlite_table_builder: ^x.y.z  # 替换为最新版本号

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

接下来是一个完整的示例,展示如何使用sqlite_table_builder来创建和管理SQLite数据库表:

import 'package:flutter/material.dart';
import 'package:sqlite3/sqlite3.dart' as sqlite3;
import 'package:sqlite_table_builder/sqlite_table_builder.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SQLite Table Builder Example'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late sqlite3.Database db;

  @override
  void initState() {
    super.initState();
    initDatabase();
  }

  Future<void> initDatabase() async {
    db = await sqlite3.openInMemory(); // 打开一个内存数据库,你可以使用 open(path) 打开一个文件数据库

    // 使用 TableBuilder 来定义表结构
    final tableBuilder = TableBuilder('users')
      ..addColumn(ColumnBuilder('id', DataType.integer, isPrimaryKey: true, autoIncrement: true))
      ..addColumn(ColumnBuilder('name', DataType.text, notNull: true))
      ..addColumn(ColumnBuilder('email', DataType.text, notNull: true, unique: true));

    // 创建表
    await tableBuilder.createTable(db);
  }

  Future<void> insertUser() async {
    final user = {
      'name': 'John Doe',
      'email': 'john.doe@example.com',
    };

    await db.execute(
      'INSERT INTO users (name, email) VALUES (?, ?)',
      [user['name']!, user['email']!],
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () async {
            await insertUser();
            setState(() {}); // 更新UI
          },
          child: Text('Insert User'),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () async {
            final users = await fetchUsers();
            for (final user in users) {
              print('User: ${user['name']}, Email: ${user['email']}');
            }
            // 你可以在这里将用户列表显示到UI上
          },
          child: Text('Fetch Users'),
        ),
      ],
    );
  }

  @override
  void dispose() {
    db.close();
    super.dispose();
  }
}

说明:

  1. 依赖导入

    • sqlite3_flutter_libs 是SQLite的Flutter库,sqlite_table_builder 是我们用来辅助创建表的库。
  2. 初始化数据库

    • initDatabase方法中,我们打开了一个内存数据库(你也可以指定一个文件路径)。
    • 使用TableBuilder定义表结构,并调用createTable方法在数据库中创建表。
  3. 插入数据

    • insertUser方法演示了如何向users表中插入数据。
  4. 查询数据

    • fetchUsers方法演示了如何从users表中查询所有数据。
  5. UI交互

    • 使用ElevatedButton按钮来触发插入和查询操作,并在控制台打印查询结果。

你可以根据需要扩展这个示例,例如将查询结果显示在UI上,而不是打印到控制台。

回到顶部