Flutter数据库序列化与PostgreSQL交互插件sql_serializable_postgres的使用

Flutter数据库序列化与PostgreSQL交互插件sql_serializable_postgres的使用

简介

sql_serializable_postgres 是一个用于在 Flutter 中与 PostgreSQL 数据库进行交互的插件。它基于 sql_serializable 包,提供了序列化和反序列化的功能,使得数据操作更加方便。

使用步骤

以下是一个完整的示例,展示如何使用 sql_serializable_postgres 插件与 PostgreSQL 数据库进行交互。

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  sql_serializable: ^1.0.0
  sql_serializable_postgres: ^1.0.0

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

2. 创建数据模型

创建一个简单的数据模型类,并使用 @SqlSerializable 注解来生成序列化代码。

import 'package:sql_serializable/sql_serializable.dart';

part 'user.g.dart'; // 生成的代码文件

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

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

  @SqlSerializable()
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 初始化 PostgreSQL 连接

使用 postgres 包来初始化 PostgreSQL 数据库连接。

import 'package:postgres/postgres.dart';

final connection = PostgreSQLConnection(
  'localhost', // 数据库主机地址
  5432,        // 数据库端口号
  'mydatabase',// 数据库名称
  username: 'myuser',
  password: 'mypassword',
);

4. 插入数据

编写 SQL 查询并使用 sql_serializable_postgres 插入数据。

import 'package:sql_serializable_postgres/sql_serializable_postgres.dart';

void insertUser(User user) async {
  await connection.open();

  try {
    final query = '''
      INSERT INTO users (id, name, email)
      VALUES (:id, :name, :email)
    ''';

    await connection.execute(query, substitutionValues: user.toJson());

    print('用户已插入');
  } finally {
    await connection.close();
  }
}

5. 查询数据

编写 SQL 查询并使用 sql_serializable_postgres 查询数据。

Future<List<User>> getUsers() async {
  await connection.open();

  try {
    final query = '''
      SELECT * FROM users
    ''';

    final results = await connection.mappedResultsQuery(query);

    return results.map((row) => User.fromJson(row['users'])).toList();
  } finally {
    await connection.close();
  }
}

6. 删除数据

编写 SQL 查询并使用 sql_serializable_postgres 删除数据。

void deleteUser(int userId) async {
  await connection.open();

  try {
    final query = '''
      DELETE FROM users WHERE id = :id
    ''';

    await connection.execute(query, substitutionValues: {'id': userId});

    print('用户已删除');
  } finally {
    await connection.close();
  }
}

7. 主程序

将以上代码整合到主程序中进行测试。

void main() async {
  await connection.open();

  // 插入用户
  final newUser = User(id: 1, name: 'John Doe', email: 'john.doe@example.com');
  await insertUser(newUser);

  // 查询用户
  final users = await getUsers();
  print(users);

  // 删除用户
  await deleteUser(1);

  await connection.close();
}
1 回复

更多关于Flutter数据库序列化与PostgreSQL交互插件sql_serializable_postgres的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,与PostgreSQL数据库进行交互时,sql_serializable_postgres 是一个非常有用的插件,它结合了 sql_serializable 和 PostgreSQL 数据库的交互功能。这个插件可以帮助你自动生成序列化和反序列化代码,简化与数据库的交互过程。

以下是如何使用 sql_serializable_postgres 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  sql_serializable_postgres: ^0.1.0  # 使用最新版本
  postgres: ^2.0.0  # 用于与PostgreSQL交互

dev_dependencies:
  build_runner: ^2.1.0  # 用于代码生成
  sql_serializable_postgres_generator: ^0.1.0  # 生成序列化代码

2. 创建模型类

创建一个模型类,并使用 @SqlSerializablePostgres 注解来标记它。这个注解会告诉 sql_serializable_postgres 生成序列化和反序列化的代码。

import 'package:sql_serializable_postgres/sql_serializable_postgres.dart';

part 'user_model.g.dart';  // 生成的代码文件

@SqlSerializablePostgres()
class User {
  final int id;
  final String name;
  final String email;

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

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 生成代码

运行以下命令来生成序列化和反序列化的代码:

flutter pub run build_runner build

这将会生成 user_model.g.dart 文件,其中包含 _$UserFromJson_$UserToJson 方法。

4. 与PostgreSQL交互

使用 postgres 包来与 PostgreSQL 数据库进行交互。以下是一个简单的例子,展示了如何将 User 对象插入到数据库中:

import 'package:postgres/postgres.dart';
import 'user_model.dart';

Future<void> main() async {
  final connection = PostgreSQLConnection('localhost', 5432, 'your_database',
      username: 'your_username', password: 'your_password');

  await connection.open();

  final user = User(id: 1, name: 'John Doe', email: 'john.doe@example.com');

  await connection.query(
    'INSERT INTO users (id, name, email) VALUES (@id, @name, @email)',
    substitutionValues: user.toJson(),
  );

  await connection.close();
}

5. 查询数据

你还可以从数据库中查询数据并将其反序列化为 User 对象:

Future<void> fetchUsers() async {
  final connection = PostgreSQLConnection('localhost', 5432, 'your_database',
      username: 'your_username', password: 'your_password');

  await connection.open();

  final results = await connection.query('SELECT * FROM users');

  final users = results.map((row) => User.fromJson(row.toColumnMap())).toList();

  for (var user in users) {
    print('User: ${user.name}, Email: ${user.email}');
  }

  await connection.close();
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!