Flutter数据库连接插件quds_mysql的使用

Flutter数据库连接插件quds_mysql的使用

quds_mysql 是一个用于在 Flutter 应用程序中自动化的 MySQL 数据库连接插件。本文将通过示例代码详细介绍如何使用该插件。

如何使用

请查看 ./example 目录以获取示例代码。

1. 创建模型

模型类应扩展自 DbModel 类,并定义其模式。

class Note extends DbModel {
  var title = StringField(columnName: 'title');
  var content = StringField(columnName: 'content');
  var isImportant = BoolField(columnName: 'isImportant');
 
  [@override](/user/override)
  List<FieldWithValue>? getFields() => [title, content, isImportant];
}

注意: 每个模型都有默认字段:

  • id(自动递增整数字段)
  • creationTime(创建时自动设置)
  • modificationTime(创建时和每次更新操作时自动设置)

2. 创建表管理器

class NotesRepository extends DbRepository<Note> {
  NotesRepository() : super(() => Note());

  [@override](/user/override)
  String get tableName => 'Notes';
}

如上所示,可以通过覆盖 tableName 属性来设置表名。

注意: 在 Repository 类构造函数中,应提供模型对象的创建函数。

NotesRepository NotesRepository = NotesRepository();

3. 增删改查(CRUD)操作

创建(插入)

单个插入
Note n = Note();
n.title.value = 'New note';
n.content.value = 'Note content, describe your self';
n.isImportant.value = ([true, false]..shuffle()).first;
await NotesRepository.insertEntry(n);
批量插入
await NotesRepository.insertCollection([n1,n2,n3,...]);

读取(查询)

var allNotes = await NotesRepository.select();
var importantNotes = await NotesRepository.select(where: (n) => n.isImportant.isTrue);
var importantRed = await NotesRepository.select(where: (n) => n.isImportant.isTrue);

更新

n.title = 'new title';
await NotesRepository.updateEntry(n);

删除

await NotesRepository.deleteEntry(n);

监控变化

要处理表中的变化,可以添加监听器:

NotesRepository.addEntryChangeListner((changeType, entry) {
  switch (changeType) {
    case EntryChangeType.Insertion:
      // 新笔记已添加 (entry)
      break;
    case EntryChangeType.Deletion:
      // (entry) 已被删除
      break;
    case EntryChangeType.Modification:
      // (entry) 已被修改
      break;
  }
});

完整示例代码

以下是一个完整的示例代码,展示了如何使用 quds_mysql 插件进行数据库操作。

import 'package:quds_mysql/quds_mysql.dart';

Future<void> main() async {
  my_db.DbHelper.mainDb = 'testdb';
  my_db.DbHelper.dbUser = 'root';
  my_db.DbHelper.dbPassword = '0';
  my_db.DbHelper.port = 2020;
  await Future.delayed(const Duration(seconds: 1));

  var repo = StudentsRepository();
  var std = Student();
  var date = DateTime(2000);
  print(date);
  std.birthDate.value = date;
  print(std.birthDate.value);

  await repo.updateEntry(std);
  print(std.birthDate.value);

  int id = std.id.value!;
  var std2 = await repo.loadEntryById(id);
  print(std2!.birthDate.value?.toLocal());

  await repo.updateEntry(std2);
  var std3 = await repo.loadEntryById(id);
  print(std3!.birthDate.value?.toLocal());
}

class Student extends DbModel {
  var name = StringField(columnName: 'name');
  var secondName = StringField(columnName: 'second_name');
  var thirdName = StringField(columnName: 'third_name');
  var familyName = StringField(columnName: 'family_name');
  var mobile = StringField(columnName: 'mobile');
  var identity = StringField(columnName: 'identity');
  var deviceid = StringField(columnName: 'deviceid');
  var schoolId = IntField(columnName: 'school_id');
  var code = StringField(columnName: 'code');
  var isActive = IntField(columnName: 'is_active');
  var licenseType = IntField(columnName: 'license_type');
  var typeApp = IntField(columnName: 'type_app');
  var examCount = IntField(columnName: 'exam_count');
  var fromApp = IntField(columnName: 'from_app');
  var isDeleteDevice = IntField(columnName: 'is_delete_device');
  var birthDate = DateTimeField(columnName: 'birth_date');

  [@override](/user/override)
  List<FieldWithValue>? getFields() => [
        name,
        secondName,
        thirdName,
        familyName,
        mobile,
        identity,
        deviceid,
        schoolId,
        code,
        isActive,
        licenseType,
        typeApp,
        examCount,
        fromApp,
        isDeleteDevice,
        birthDate
      ];
}

class StudentsRepository extends DbRepository<Student> {
  static final StudentsRepository _instance = StudentsRepository._();
  factory StudentsRepository() => _instance;

  StudentsRepository._() : super(() => Student());

  [@override](/user/override)
  String get tableName => 'students';
}

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

1 回复

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


quds_mysql 是一个用于在 Flutter 应用中连接和操作 MySQL 数据库的插件。它允许你直接从 Flutter 应用中执行 SQL 查询并与 MySQL 数据库进行交互。

以下是使用 quds_mysql 插件的基本步骤和示例代码:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  quds_mysql: ^1.0.0  # 请确保使用最新版本

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

2. 导入库

在你的 Dart 文件中导入 quds_mysql 库:

import 'package:quds_mysql/quds_mysql.dart';

3. 连接到 MySQL 数据库

使用 MySQLConnection 类来连接到 MySQL 数据库。你需要提供数据库的主机名、端口、用户名、密码和数据库名称。

Future<void> connectToDatabase() async {
  var conn = await MySQLConnection.createConnection(
    host: 'localhost',
    port: 3306,
    userName: 'your_username',
    password: 'your_password',
    databaseName: 'your_database',
  );

  await conn.connect();
  print('Connected to MySQL database');
}

4. 执行 SQL 查询

一旦连接到数据库,你可以使用 execute 方法来执行 SQL 查询。例如,执行一个简单的 SELECT 查询:

Future<void> fetchData() async {
  var conn = await MySQLConnection.createConnection(
    host: 'localhost',
    port: 3306,
    userName: 'your_username',
    password: 'your_password',
    databaseName: 'your_database',
  );

  await conn.connect();

  var results = await conn.execute('SELECT * FROM your_table');
  for (var row in results) {
    print('Row: $row');
  }

  await conn.close();
}

5. 插入数据

你可以使用 execute 方法来插入数据:

Future<void> insertData() async {
  var conn = await MySQLConnection.createConnection(
    host: 'localhost',
    port: 3306,
    userName: 'your_username',
    password: 'your_password',
    databaseName: 'your_database',
  );

  await conn.connect();

  await conn.execute(
    'INSERT INTO your_table (column1, column2) VALUES (?, ?)',
    ['value1', 'value2'],
  );

  await conn.close();
}

6. 关闭连接

完成数据库操作后,记得关闭连接以释放资源:

await conn.close();

7. 处理异常

在执行数据库操作时,建议使用 try-catch 块来捕获和处理可能的异常:

try {
  await conn.connect();
  var results = await conn.execute('SELECT * FROM your_table');
  for (var row in results) {
    print('Row: $row');
  }
} catch (e) {
  print('Error: $e');
} finally {
  await conn.close();
}
回到顶部