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

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

在本教程中,我们将展示如何在Flutter应用程序中使用libpq_dart插件来连接和操作PostgreSQL数据库。我们将提供两个示例,一个是低级API的使用,另一个是高级API的使用。

低级API示例

import 'dart:ffi';
import 'dart:io';
import 'package:freetype_dart/src/extensions/extensions.dart';
import 'package:freetype_dart/src/generated_bindings.dart';

void main(List<String> args) {
  // 加载libpq动态库
  var dl = DynamicLibrary.open(r'libpq\bin\libpq.dll');
  var pq = LibpqBindings(dl);

  // 连接信息字符串
  var conninfo = 'user=postgres password=dart host=127.0.0.1 dbname=postgres';
  
  // 连接到数据库
  var conn = pq.PQconnectdb(conninfo.toNativeUtf8().cast());
  
  // 检查连接状态
  if (pq.PQstatus(conn) != ConnStatusType.CONNECTION_OK)
    print(pq.PQerrorMessage(conn));

  // 执行SQL查询
  var res = pq.PQexec(
      conn, "SELECT * from pg_catalog.pg_user limit 1".toNativeUtf8().cast());

  // 检查查询结果状态
  if (pq.PQresultStatus(res) != ExecStatusType.PGRES_TUPLES_OK) {
    print("查询失败: " + pq.PQerrorMessage(conn).toDartString());
    pq.PQclear(res);
    pq.PQfinish(conn);
    return;
  }

  // 获取字段数量
  var nFields = pq.PQnfields(res);
  for (var i = 0; i < nFields; i++) {
    stdout.write(" " + pq.PQfname(res, i).toDartString() + ' | ');
  }

  // 遍历查询结果
  for (var i = 0; i < pq.PQntuples(res); i++) {
    print('');
    for (var j = 0; j < nFields; j++) {
      stdout.write(pq.PQgetvalue(res, i, j).toDartString() + ' | ');
    }
    print('');
  }

  // 清理资源
  pq.PQclear(res);
}

高级API示例

import 'package:libpq_dart/libpq_dart.dart';

void main(List<String> args) {
  // 连接信息字符串
  final conninfo =
      'user=dart password=dart host=127.0.0.1 dbname=banco_teste port=5435';
  
  // 创建LibPq对象
  final pq = LibPq(conninfo);

  // 执行参数化SQL插入语句
  final res =
      pq.execParams(r'INSERT INTO public.knowledge (id, name, arquivo) values($1,$2);', ['1', 'Isaque']);

  // 输出受影响行数
  print('受影响行数: ${res.affectedRows}');

  // 清理结果集
  res.dispose();

  // 输出libpq版本
  print('libpq版本: ${pq.libpqVersion}');

  // 释放资源
  pq.dispose();
}

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

1 回复

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


libpq_dart 是一个用于在 Flutter 应用中连接 PostgreSQL 数据库的插件。它基于 libpq 库,提供了与 PostgreSQL 数据库进行交互的功能。以下是如何在 Flutter 项目中使用 libpq_dart 的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  libpq_dart: ^0.0.1 # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入库

在你的 Dart 文件中导入 libpq_dart

import 'package:libpq_dart/libpq_dart.dart';

3. 连接到数据库

使用 PQconnectdb 方法连接到 PostgreSQL 数据库。连接字符串的格式如下:

void connectToDatabase() async {
  final connString = 'postgresql://username:password[@localhost](/user/localhost):5432/database_name';
  final connection = PQconnectdb(connString);

  if (connection.status == ConnStatusType.CONNECTION_OK) {
    print('Connected to the database successfully!');
  } else {
    print('Connection failed: ${connection.errorMessage}');
  }
}

4. 执行查询

使用 PQexec 方法执行 SQL 查询:

void executeQuery(PGconn connection) {
  final result = PQexec(connection, 'SELECT * FROM your_table');

  if (result.status == ExecStatusType.PGRES_TUPLES_OK) {
    for (var i = 0; i < result.ntuples; i++) {
      for (var j = 0; j < result.nfields; j++) {
        print('Row $i, Column ${result.fname(j)}: ${result.getValue(i, j)}');
      }
    }
  } else {
    print('Query execution failed: ${result.errorMessage}');
  }
}

5. 关闭连接

在完成数据库操作后,记得关闭连接:

void closeConnection(PGconn connection) {
  PQfinish(connection);
  print('Connection closed.');
}

6. 完整的示例代码

以下是一个完整的示例,展示了如何连接数据库、执行查询并关闭连接:

import 'package:libpq_dart/libpq_dart.dart';

void main() async {
  final connString = 'postgresql://username:password[@localhost](/user/localhost):5432/database_name';
  final connection = PQconnectdb(connString);

  if (connection.status == ConnStatusType.CONNECTION_OK) {
    print('Connected to the database successfully!');
    executeQuery(connection);
  } else {
    print('Connection failed: ${connection.errorMessage}');
  }

  closeConnection(connection);
}

void executeQuery(PGconn connection) {
  final result = PQexec(connection, 'SELECT * FROM your_table');

  if (result.status == ExecStatusType.PGRES_TUPLES_OK) {
    for (var i = 0; i < result.ntuples; i++) {
      for (var j = 0; j < result.nfields; j++) {
        print('Row $i, Column ${result.fname(j)}: ${result.getValue(i, j)}');
      }
    }
  } else {
    print('Query execution failed: ${result.errorMessage}');
  }
}

void closeConnection(PGconn connection) {
  PQfinish(connection);
  print('Connection closed.');
}
回到顶部