Flutter纯 Dart 实现的 PostgreSQL 驱动程序插件dargres的探索使用

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 Flutter

Flutter纯 Dart 实现的 PostgreSQL 驱动程序插件dargres的探索使用

简介

dargres 是一个纯 Dart 实现的 PostgreSQL 驱动程序,旨在移植 Tony Locke 的 pg8000 Python 库。它受到多个开源项目的启发,并支持多种功能和特性。

主要特性

  • 认证方式: 支持明文密码、MD5 密码和 SASL SCRAM-SHA-256。
  • 连接方式: 支持无 SSL 和带 SSL 连接。
  • 查询语句: 支持简单查询、未命名预处理语句和命名预处理语句。
  • 事务: 支持 PHP PDO 风格和闭包风格的事务。
  • 通知和消息: 支持数据库的通知和消息。
  • 字符集支持: 支持 latin1、utf8、ascii 和 win1252。

示例代码

创建带有 SSL 的连接并执行简单查询

import 'dart:io';
import 'package:dargres/dargres.dart';

void main() async {
  var sslContext = SslContext.createDefaultContext();

  var con = CoreConnection(
    'user',
    database: 'dataBaseTest',
    host: 'localhost',
    port: 5432,
    password: '123456',    
    sslContext: sslContext,   
  );

  await con.connect();

  var results = await con.querySimple('select 1');
  print('results: $results');
  //results: [[1]]
  await con.close();
}

创建连接并执行简单查询

import 'package:dargres/dargres.dart';

void main() async {
  var con = CoreConnection(
    'user',
    database: 'dataBaseTest',
    host: 'localhost',
    port: 5432,
    password: '123456',       
  );

  await con.connect();

  var results = await con.querySimple('select 1');
  print('results: $results');
  //result [[1]]
  await con.close();
}

创建连接并执行查询(包括未命名预处理语句和简单查询)

import 'dart:io';
import 'package:dargres/dargres.dart';

void main() async {
  var sslContext = SslContext.createDefaultContext();

  var con = CoreConnection(
    'username', 
    database: 'dataBaseTest',
    host: 'localhost', 
    port: 5432,
    password: '123456', 
    allowAttemptToReconnect: false,
    sslContext: sslContext,
  );
  
  await con.connect();
  await con.execute('DROP SCHEMA IF EXISTS myschema CASCADE;');
  await con.execute('CREATE SCHEMA IF NOT EXISTS myschema;');
  await con.execute('SET search_path TO myschema;');

  await con.execute('''
        CREATE TABLE "myschema"."test_arrays" ( 
            name NAME,
            varchar_array_type varchar[], 
            int8_array_type int8[],
            int2_array_type int2[],
            names_array_type NAME[]  
        );
        ''');

  await con.queryUnnamed(r'''
INSERT INTO test_arrays
(name, varchar_array_type,int8_array_type, int2_array_type, names_array_type)
 VALUES 
($1, $2, $3, $4, $5);
''', ['Vagner',["João",'''Isaque Sant'Ana'''],[1,2,3],[1,2,3],['name1']]);

  var results = await con.querySimple(r'''SELECT * FROM test_arrays;''');

  for (var row in results) {
    print(row.toColumnMap());
    //Result: {name: Vagner, varchar_array_type: [João, Isaque Sant'Ana], int8_array_type: [1, 2, 3], int2_array_type: [1, 2, 3], names_array_type: [name1]}
  } 

  await con.close();
  exit(0);
}

执行 PHP PDO 风格的事务

import 'package:dargres/dargres.dart';

void main() async {
  var con = CoreConnection(
    'user',
    database: 'dataBaseTest',
    host: 'localhost',
    port: 5432,
    password: '123456',       
  );

  await con.connect();

  final transaction = await con.beginTransaction();
  try {
    await transaction.querySimple(
      """INSERT INTO "people" ("name", "dateRegister") VALUES ('Alex', '2022-11-30 16:22:03') returning id""");
    await con.commit(transaction);
  } catch (e) {
    await con.rollBack(transaction);
  }

  await con.close();
}

使用闭包执行事务

import 'package:dargres/dargres.dart';

void main() async {
  var con = CoreConnection(
    'user',
    database: 'dataBaseTest',
    host: 'localhost',
    port: 5432,
    password: '123456',       
  );

  await con.connect();

  await con.runInTransaction((ctx) async {
    return ctx.querySimple(
      """INSERT INTO "people" ("name", "dateRegister") VALUES ('Alex', '2022-11-30 16:22:03') returning id""");
  });

  await con.close();
}

监听数据库通知

import 'dart:async';
import 'package:dargres/dargres.dart';

void main() async {
  var con = CoreConnection(
    'user',
    database: 'dataBaseTest',
    host: 'localhost',
    port: 5432,
    password: '123456',       
  );

  await con.connect();

  con.notifications.listen((event) async {
    print('$event');
    //Result: {backendPid: 9188, channel: db_change_event, payload: This is the payload}
  });
  
  await con.execute('LISTEN "db_change_event"');
  Timer.periodic(Duration(seconds: 2), (t) async {
    await con.execute("NOTIFY db_change_event, 'This is the payload'");
  });

  await con.close();
}

总结

dargres 是一个功能丰富的 PostgreSQL 驱动程序,适用于 Dart 开发者在 Flutter 或其他 Dart 项目中与 PostgreSQL 数据库进行交互。通过上述示例,您可以快速上手并实现各种数据库操作。


更多关于Flutter纯 Dart 实现的 PostgreSQL 驱动程序插件dargres的探索使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter纯 Dart 实现的 PostgreSQL 驱动程序插件dargres的探索使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在探索Flutter中未知功能插件dargres时,了解其API和用法是至关重要的。虽然dargres可能不是一个广为人知的插件(由于Flutter插件生态系统非常庞大,一些小众插件可能不被广泛了解),但我们可以假设它类似于其他Flutter插件,通常通过Dart代码进行集成和使用。

以下是一个假设性的代码案例,用于展示如何在一个Flutter项目中集成和使用一个名为dargres的插件(请注意,这个插件名和API是虚构的,仅用于示例)。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加dargres作为依赖项:

dependencies:
  flutter:
    sdk: flutter
  dargres: ^x.y.z  # 假设这是插件的版本号

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

2. 导入插件

在你的Dart文件中导入dargres插件:

import 'package:dargres/dargres.dart';

3. 使用插件功能

假设dargres插件提供了一个名为SomeFeature的类,该类有一个方法performAction,我们可以这样使用它:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  String result = "";

  void _performDargresAction() async {
    // 假设 SomeFeature 是 dargres 插件中的一个类
    SomeFeature feature = SomeFeature();
    try {
      // 调用 performAction 方法,并等待其完成
      String response = await feature.performAction("example_parameter");
      // 更新状态以显示结果
      setState(() {
        result = "Action performed successfully: $response";
      });
    } catch (error) {
      // 处理错误
      setState(() {
        result = "Error performing action: $error";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("dargres Plugin Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              result,
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _performDargresAction,
              child: Text("Perform Dargres Action"),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 插件文档:务必查阅dargres插件的官方文档或源代码,以获取准确的API和使用指南。
  2. 错误处理:在实际应用中,更全面的错误处理是必要的,以确保应用的稳定性和用户体验。
  3. 权限:如果dargres插件需要特定的权限(如访问设备存储、网络等),请确保在AndroidManifest.xmlInfo.plist中正确声明这些权限。

由于dargres是一个假设性的插件名称,上述代码仅用于展示如何在Flutter项目中集成和使用一个插件的通用方法。在实际应用中,你需要根据dargres插件的实际API和功能进行调整。

回到顶部