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

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

postgres_fork 是一个用于在 Flutter 中连接和查询 PostgreSQL 数据库的库。该库是从 postgresql-dart 分支出来的,并添加了一些新功能。

功能特性

  • 支持改变连接的字符编码,如从默认的 UTF8 改为 win1252 或 iso8859。
  • 实现了使用问号占位符风格执行预编译语句,类似于 PHP PDO。
final results = await connection.query(
    'SELECT * FROM public.table_example LIMIT ?',
    substitutionValues: [2000], 
    placeholderIdentifier: PlaceholderIdentifier.onlyQuestionMark);

使用方法

创建和打开连接

首先,创建一个 PostgreSQLConnection 并打开它:

var connection = PostgreSQLConnection("localhost", 5432, "dart_test",
    username: "dart", password: "dart");
await connection.open();

执行查询

你可以通过 query 方法执行查询:

List<List<dynamic>> results = await connection.query("SELECT a, b FROM table WHERE a = @aValue",
    substitutionValues: {"aValue": 3});

for (final row in results) {
  var a = row[0];
  var b = row[1];
}

返回行作为包含表和列名称的映射

List<Map<String, Map<String, dynamic>>> results = await connection.mappedResultsQuery(
    "SELECT t.id, t.name, u.name FROM t LEFT OUTER JOIN u ON t.id=u.t_id");

for (final row in results) {
  var tID = row["t"]["id"];
  var tName = row["t"]["name"];
  var uName = row["u"]["name"];
}

在事务中执行查询

await connection.transaction((ctx) async {
    var result = await ctx.query("SELECT id FROM table");
    await ctx.query("INSERT INTO table (id) VALUES (@a:int4)",
        substitutionValues: {"a": result.last[0] + 1});
});

完整示例

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

import 'package:postgres_fork/postgres.dart';

void main() async {
  // 创建连接
  final connection = PostgreSQLConnection(
    'localhost',
    5432,
    'data_base',
    username: 'postgres',
    password: 'pass',
    encoding: Windows1252Codec(allowInvalid: false),
  );

  // 打开连接
  await connection.open();
  
  // 设置客户端编码
  await connection.query('''SET client_encoding = 'win1252';''');

  final now1 = DateTime.parse(DateTime.now().toIso8601String());

  // 执行插入操作
  final res = await connection.query('''INSERT INTO public.favorites
  (id, date_register, description)
  VALUES (10, ?, ?) returning id''',
      substitutionValues: [now1, 'City Hall of São Paulo - Brazil'],
      placeholderIdentifier: PlaceholderIdentifier.onlyQuestionMark);

  print('result: $res');

  // 在事务中执行查询
  final res2 = await connection.transaction((ctx) {
    return ctx.query('SELECT * FROM public.favorites WHERE id=?',
        substitutionValues: [res.first.first],
        allowReuse: true,
        timeoutInSeconds: 10,
        placeholderIdentifier: PlaceholderIdentifier.onlyQuestionMark);
  });

  print('result: $res2');

  // 执行查询并返回映射结果
  final res3 = await connection.mappedResultsQuery(
      'SELECT * FROM public.favorites ORDER BY id desc LIMIT @limite',
      substitutionValues: {'limite': 10},
      placeholderIdentifier: PlaceholderIdentifier.atSign);

  print('result: $res3');

  // 关闭连接
  await connection.close();
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用postgres_fork插件来连接PostgreSQL数据库的示例代码。请注意,由于Flutter是跨平台的移动开发框架,直接在客户端连接数据库通常不是最佳实践,因为这可能带来安全性和性能问题。通常,你会在后端服务器上处理数据库操作,然后通过API与Flutter前端进行通信。然而,如果你确实需要在Flutter应用中直接连接数据库(例如,用于学习或特定需求),以下是一个基本的示例。

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

dependencies:
  flutter:
    sdk: flutter
  postgres_fork: ^0.1.0  # 请检查最新版本号

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

接下来,你可以使用以下代码来连接PostgreSQL数据库并执行一个简单的查询:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PostgreSQL Connection Example'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: fetchData(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text('Data: ${snapshot.data}');
              }
            },
          ),
        ),
      ),
    );
  }
}

Future<String> fetchData() async {
  // 数据库连接配置
  var configuration = Configuration()
    ..username = 'your_username'
    ..password = 'your_password'
    ..host = 'your_host' // 例如 'localhost' 或数据库服务器的IP地址
    ..port = 5432
    ..database = 'your_database';

  // 建立连接
  var connection = await PostgreSQLConnection.open(configuration);
  print('Connected to the PostgreSQL database');

  // 执行查询
  var result = await connection.query('SELECT version();');
  var row = result.single;

  // 获取查询结果
  var postgresVersion = row.first;

  // 关闭连接
  await connection.close();

  return postgresVersion.toString();
}

在这个示例中:

  1. 我们定义了一个Flutter应用,其中包含一个显示数据库版本信息的页面。
  2. Configuration类用于配置数据库连接参数,如用户名、密码、主机、端口和数据库名。
  3. 使用PostgreSQLConnection.open(configuration)方法建立与PostgreSQL数据库的连接。
  4. 执行一个简单的SQL查询来获取PostgreSQL的版本信息。
  5. 查询结果通过FutureBuilder在UI中显示。
  6. 最后,关闭数据库连接。

重要提示

  • 在实际生产环境中,直接在客户端连接数据库通常是不安全的。你应该考虑在后端服务器上处理数据库操作,并通过安全的API与客户端通信。
  • 确保数据库连接信息(如用户名和密码)的安全存储和传输。
  • 考虑使用SSL/TLS加密数据库连接以保护数据传输。

希望这个示例能帮助你理解如何在Flutter应用中使用postgres_fork插件连接PostgreSQL数据库。如果你有任何进一步的问题,请随时询问!

回到顶部